14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Elixirの本家のドキュメントの再帰の例は、とても上品なので見習おう

Posted at

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 つけるだけ。
これで上品になるので、つけましょう。

この気持ちで関数を定義していく事が、契約プログラミングだとおもいました。

14
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?