Elixier - Schleifen

Aufgrund der Unveränderlichkeit werden Schleifen in Elixir (wie in jeder funktionalen Programmiersprache) anders geschrieben als imperative Sprachen. Zum Beispiel werden Sie in einer imperativen Sprache wie C schreiben -

for(i = 0; i < 10; i++) {
   printf("%d", array[i]);
}

In dem oben angegebenen Beispiel mutieren wir sowohl das Array als auch die Variable i. Eine Mutation ist in Elixir nicht möglich. Stattdessen basieren funktionale Sprachen auf Rekursion: Eine Funktion wird rekursiv aufgerufen, bis eine Bedingung erreicht ist, die die Fortsetzung der rekursiven Aktion verhindert. Dabei werden keine Daten mutiert.

Schreiben wir nun eine einfache Schleife mit Rekursion, die Hallo druckt n mal.

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)

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello

Wir haben die Musteranpassungstechniken und die Rekursion der Funktion verwendet, um eine Schleife erfolgreich zu implementieren. Rekursive Definitionen sind schwer zu verstehen, aber das Konvertieren von Schleifen in Rekursion ist einfach.

Elixier bietet uns die Enum module. Dieses Modul wird für die iterativsten Schleifenaufrufe verwendet, da es viel einfacher ist, diese zu verwenden, als zu versuchen, rekursive Definitionen für dieselben herauszufinden. Wir werden diese im nächsten Kapitel diskutieren. Ihre eigenen rekursiven Definitionen sollten nur verwendet werden, wenn Sie mit diesem Modul keine Lösung finden. Diese Funktionen sind Tail Call-optimiert und recht schnell.