エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

FizzBuzz in Elixir

Elixir で簡単に FizzBuzz を実現するパッケージができてしまったのでブログに書いています。

mix new コマンドでプロジェクトを作成したら、mix.exs を編集してパッケージを追加します。

def deps do
  [
    {:word_game, "~> 0.1", github: "mattsan/word_game"}
  ]
end

mix deps.get でパッケージを取り込んで FizzBuzz モジュール を書きます。

defmodule FizzBuzz do
  use WordGame, fizz: 3, buzz: 5
end

FizzBuzz モジュールに fizz/1 関数と buzz/1 関数が追加されるので、こんな感じで Fizz ったり Buzz ったりできます。

import FizzBuzz
 1 |> fizz() |> buzz() |> IO.puts() # => 1
 3 |> fizz() |> buzz() |> IO.puts() # => Fizz
 5 |> fizz() |> buzz() |> IO.puts() # => Buzz
15 |> fizz() |> buzz() |> IO.puts() # => FizzBuzz

fizz/1buzz/1 を適用する順序を変えると BuzzFizz もできます。

15 |> buzz() |> fizz() |> IO.puts() # => BuzzFizz

関数名にはマルチバイト文字も利用できるので ほげふが も書けます。

defmodule HogeFuga do
  use WordGame, ほげ: 3, ふが: 5
end
import HogeFuga
 1 |> ほげ() |> ふが() |> IO.puts() # => 1
 3 |> ほげ() |> ふが() |> IO.puts() # => ほげ
 5 |> ほげ() |> ふが() |> IO.puts() # => ふが
15 |> ほげ() |> ふが() |> IO.puts() # => ほげふが
15 |> ふが() |> ほげ() |> IO.puts() # => ふがほげ

関数を繰り返し適用することもできます。

15 |> ほげ() |> ほげ() |> IO.puts()  #=> ほげほげ
15 |> ふが() |> ふが() |> IO.puts() # => ふがふが