Elixir-loops
提供:Dev Guides
エリクサー-ループ
不変性のため、Elixirのループは(関数型プログラミング言語のように)命令型言語とは異なる方法で記述されています。 たとえば、Cのような命令型言語では、次のように記述します-
for(i = 0; i < 10; i++) {
printf("%d", array[i]);
}
上記の例では、配列と変数 i の両方を変更しています。 Elixirでは変更はできません。 代わりに、関数型言語は再帰に依存しています。関数は、再帰アクションの継続を停止する条件に達するまで再帰的に呼び出されます。 このプロセスではデータは変更されません。
再帰を使用して、 n 回helloを出力する単純なループを記述しましょう。
defmodule Loop do
def print_multiple_times(msg, n) when n <= 1 do
IO.puts msg
end
def print_multiple_times(msg, n) do
IO.puts msg
print_multiple_times(msg, n - 1)
end
end
Loop.print_multiple_times("Hello", 10)
上記のプログラムが実行されると、次の結果が生成されます-
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
関数のパターンマッチング手法と再帰を利用して、ループを正常に実装しました。 再帰的な定義を理解することは困難ですが、ループを再帰に変換することは簡単です。
Elixirは* Enumモジュール*を提供します。 このモジュールは、同じものの再帰的な定義を理解しようとするよりも簡単に使用できるため、最も反復的なループ呼び出しに使用されます。 これらについては次の章で説明します。 独自の再帰的な定義は、そのモジュールを使用したソリューションが見つからない場合にのみ使用してください。 これらの関数はテールコールに最適化されており、非常に高速です。