Elixir - 迴圈



由於不可變性,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 模組。這個模組用於大多數迭代迴圈呼叫,因為它比嘗試為相同的目的找出遞迴定義更容易使用。我們將在下一章討論這些。只有在找不到使用該模組的解決方案時,才應使用您自己的遞迴定義。這些函式經過尾呼叫最佳化,速度很快。

廣告
© . All rights reserved.