Iterasi
Bagaimana cara kita mencetak angka dari 0 hingga 10? Tentu saja, kita bisa mencetak angka tersebut satu per satu sebagai berikut:
cetak(0)
cetak(1)
cetak(2)
cetak(3)
cetak(4)
cetak(5)
cetak(6)
cetak(7)
cetak(8)
cetak(9)
cetak(10)
Terus, bagaimana kalau kita ingin mencetak angka dari 0 hingga 100? Menulis satu per satu? Tentu capek bukan? Solusinya adalah: iterasi!
Terdapat 3 jenis iterasi dalam Gara:
- Iterasi dari satu titik ke titik lainnya
- Iterasi selama belum mencapai suatu titik
- Iterasi fungsional
Iterasi dari satu titik ke titik lainnya
Sebelumnya, kita mencetak satu-per-satu angka dari 0
hingga 10
. Gara memiliki sintaksis iterasi dari
yang memiliki struktur sebagai berikut:
dari ada <nama-variabel> = <kondisi-awal>; <pengecek>; <pengubah> {
<baris-baris kode>
}
Mari kita gunakan iterasi dari
untuk mencetak angka dari 0
hingga 10
:
dari ada i = 0; i <= 10; i++ {
cetak(i)
}
Sangat sederhana bukan? Bahkan, dengan mengganti angka 10
diatas menjadi 100
, kita bisa mencetak angka dari 0 hingga 100, tanpa satu per satu menulis kode cetak(0)
hingga cetak(100)
.
Contoh lainnya, kode dibawah ini mencetak angka ganjil saja dari 1 hingga 1000.
dari ada angka = 1; angka <= 1000; angka++ {
jika angka % 2 == 1 {
cetak(angka)
}
}
Bentuk iterasi ini sering digunakan saat batas awal dan batas akhir kode iterasi itu sendiri sudah diketahui.
Penting
Bentuk iterasi ini sering digunakan saat batas awal dan batas akhir kode iterasi itu sendiri sudah diketahui.
Iterasi selama belum mencapai suatu titik
Iterasi selama
memiliki struktur sebagai berikut:
selama <pengecek> {
<baris-baris kode>
}
Dengan operasi iterasi selama
, selama kode <pengecek>
diatas bernilai benar
, maka operasi akan tetap dilakukan.
Hal ini, memungkinkan kita menulis kode yang bisa dieksekusi tiada hentinya (harap jangan ketik kode berikut atau komputer anda bisa saja hang):
selama benar {
cetak("aku mengulang dan terus mengulang...")
cetak("hingga sirna dunia ini...")
cetak("atau komputer ini direstart...")
cetak("atau tab peramban ini engkau tutup...")
cetak("atau usahlah kau coba jalankan kode ini...")
}
Contoh kode berikut mencetak angka selama nilainya kurang dari 11
:
ada i = 0
selama i < 11 {
cetak(i)
i += 1
}
Bentuk iterasi ini sering digunakan jika batas awal dan batas akhir iterasi itu sendiri susah untuk diketahui.
Katakanlah, kita sendiri sebagai manusia selalu makan selama lapar. Tapi kita tidak tahu, kapan kita lapar, dimenit berapa, dan sebagainya. Dalam artian, batas awal dan batas akhirnya tidak diketahui. Dalam kasus tersebut, kita menggunakan kode iterasi selama
.
selama aku.lapar? {
aku.tetapMakan
jika aku.tersendat {
aku.minum
}
}
Contoh lainnya adalah ketika baris pengecek berisi operasi-operasi Boolean
. Misalnya, selama ruang bioskop belum penuh dan film belum diputar dan stok popcorn sudah hampir habis, kita masak popcorn. Kita bisa menuliskannya dengan kode berikut:
selama !ruang.penuh? && !film.diputarDi(ruang)? && popcorn.hampirHabis? {
masakPopcorn()
}
Penting
Bentuk iterasi ini sering digunakan jika batas awal dan batas akhir iterasi itu sendiri susah diketahui.
Iterasi fungsional
Jika kita memiliki suatu Deret
berisi angka [0, 1, 2, 3, 4, 5]
, bagaimana cara kita mencetaknya?
Tentu, kita bisa menggunakan iterasi dari
sebagai berikut:
ada derAngka = [0, 1, 2, 3, 4, 5]
dari ada i = 0; i < derAngka.panjang; i++ {
cetak(i)
}
Atau, karena Gara adalah bahasa fungsional, beberapa data di Gara memiliki fungsi-fungsi yang dapat membantu kita untuk melakukan iterasi. Dalam contoh kasus Deret
, kita bisa menggunakan metode Deret.tiap
:
ada derAngka = [9, 1, 2, 3, 4, 5]
derAngka.tiap(fn (angka) {
cetak(angka)
})
Selain itu, metode tiap
dalam Deret
juga dapat diberi aripicu dengan dua argumen:
ada teman = ["Ferlin", "Ian", "Wendy"]
teman.tiap(fn (nama, idk) {
cetak(nama + " ada pada indeks ke-" + idk)
})
Peta
pun juga memiliki metode tiap
yang menerima fungsi dengan dua argumen: kunci
dan nilai
.
Iterasi fungsional ini tentu dapat kita gunakan selama ia memenuhi kebutuhan kita. Biasanya, kode iterasi fungsional ini jauh lebih mudah & lebih enak untuk dibaca, sehingga jika memungkinkan, baiknya kita gunakan iterasi fungsional ini sebanyak mungkin.
Pemutusan iterasi
Iterasi dalam Gara dapat diputuskan kapanpun menggunakan kata kunci putus
.
selama benar {
cetak("aku mengulang dan terus mengulang...")
cetak("hingga sirna dunia ini...")
cetak("atau komputer ini direstart...")
cetak("atau tab peramban ini engkau tutup...")
cetak("atau usahlah kau coba jalankan kode ini...")
putus
cetak("aku tidak lagi mengulang-ulang")
}
Kata kunci putus
ini dapat digunakan dalam iterasi apapun, baik itu iterasi dari
, iterasi selama
ataupun iterasi fungsional. Namun, penggunaan putus
diluar konteks tersebut akan menjadi masalah.