Elixirのマニュアルの再帰の説明
Elixirには繰り返し文がありません。
特定の回数繰り返す場合は再帰を使います。
という説明が、Elixirのマニュアルかいてあります。
説明例のプログラム
説明の例として書いてあるコードは次のようなものでした。
defmodule Recursion do
def print_multiple_times(msg, n) when n > 0 do
IO.puts(msg)
print_multiple_times(msg, n - 1)
end
def print_multiple_times(_msg, 0) do
:ok
end
end
感想
ガード節 when n>0 が素晴らしい。
これがあると、この関数の定義が、がっちりとしたものになりますね。美しい。
説明にもあるようにnの値が負の場合、ちゃんとエラーになります。
契約プログラミングの鏡だとおもいました。
流石、Elixirのマニュアル。
私が書いた場合たぶん、こうなります。
defmodule Recursion do
def print_multiple_times(_msg, 0) do
:ok
end
def print_multiple_times(msg, n) do
IO.puts(msg)
print_multiple_times(msg, n - 1)
end
end
先に0の場合を書いて、次に、それ以外の場合を書く。
print_multiple_times("Hello",-1)
とすると大変な事になるのはわかってるけど、nの値は、非負の整数でしか使わないからいいだろう(心の声)。
先の例をみた後に見ると、なんとも雑なプログラムに見えてきました。
違いは、when n>0 つけるだけ。
これで上品になるので、つけましょう。
この気持ちで関数を定義していく事が、契約プログラミングだとおもいました。