Elixir - Loop
Karena kekekalan, loop dalam Elixir (seperti dalam bahasa pemrograman fungsional lainnya) ditulis secara berbeda dari bahasa imperatif. Misalnya, dalam bahasa imperatif seperti C, Anda akan menulis -
for(i = 0; i < 10; i++) {
printf("%d", array[i]);
}
Dalam contoh yang diberikan di atas, kami memutasi array dan variabel i. Mutasi tidak dimungkinkan di Elixir. Sebagai gantinya, bahasa fungsional mengandalkan rekursi: sebuah fungsi dipanggil secara rekursif hingga kondisi tercapai yang menghentikan tindakan rekursif untuk melanjutkan. Tidak ada data yang dimutasi dalam proses ini.
Sekarang mari kita tulis loop sederhana menggunakan rekursi yang mencetak hello n waktu.
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)
Ketika program di atas dijalankan, menghasilkan hasil sebagai berikut -
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Kami telah menggunakan teknik pencocokan pola dan rekursi fungsi untuk berhasil mengimplementasikan loop. Definisi rekursif sulit untuk dipahami tetapi mengubah loop menjadi rekursi itu mudah.
Elixir memberi kita Enum module. Modul ini digunakan untuk panggilan perulangan yang paling berulang karena lebih mudah menggunakannya daripada mencoba mencari tahu definisi rekursif untuk yang sama. Kami akan membahasnya di bab berikutnya. Definisi rekursif Anda sendiri hanya boleh digunakan ketika Anda tidak menemukan solusi menggunakan modul itu. Fungsi tersebut dioptimalkan untuk panggilan ekor dan cukup cepat.