İ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.