İksir - Döngüler

Değişmezlik nedeniyle, Elixir'deki döngüler (herhangi bir işlevsel programlama dilinde olduğu gibi) zorunlu dillerden farklı şekilde yazılmıştır. Örneğin, C gibi zorunlu bir dilde, yazacaksın -

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

Yukarıda verilen örnekte, hem diziyi hem de değişkeni değiştiriyoruz i. Elixir'de mutasyon mümkün değildir. Bunun yerine, işlevsel diller özyinelemeye dayanır: özyinelemeli eylemin devam etmesini durduran bir duruma ulaşılana kadar bir işlev özyinelemeli olarak çağrılır. Bu süreçte hiçbir veri mutasyona uğramaz.

Şimdi merhaba yazan özyinelemeyi kullanarak basit bir döngü yazalım n zamanlar.

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)

Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello

Bir döngüyü başarılı bir şekilde gerçekleştirmek için fonksiyonun kalıp eşleştirme tekniklerini ve özyinelemeyi kullandık. Özyinelemeli tanımları anlamak zordur ancak döngüleri özyinelemeye dönüştürmek kolaydır.

İksir bize Enum module. Bu modül, çoğu yinelemeli döngü çağrıları için kullanılır, çünkü bunları kullanmak, aynı için özyinelemeli tanımları bulmaya çalışmaktan çok daha kolaydır. Bunları bir sonraki bölümde tartışacağız. Kendi özyinelemeli tanımlarınız yalnızca o modülü kullanarak bir çözüm bulamadığınız zaman kullanılmalıdır. Bu işlevler, kuyruk çağrısı optimize edilmiş ve oldukça hızlıdır.