Lewati ke isi
JRG++JRG++ v0.2.0

JRG 5 · Dasar JRG

Perulangan

Mengulang pekerjaan tanpa menyalin kode. Bab ini memuat satu hal khas JRG yang kalau tidak kamu tahu, programmu akan berjalan lancar sambil menjawab salah.

pentingHal pertama yang harus kamu tahu tentang for

Di banyak bahasa, for x in daftar memberikan isi daftarnya. Di JRG, ia memberikan nomor urutnya (indeks).

for-indeks.jrg
pub fn main() {
    let nilai = [70, 85, 90]
    for x in nilai {
        wok_(x, " ")
    }
    wok("")
}
0  1  2  

Bentuk yang mengikat isi-nya memakai dua nama, dipisah koma:

for-nilai.jrg
pub fn main() {
    let nilai = [70, 85, 90]
    for i, x in nilai {
        wok("Data ke-", i, "isinya", x)
    }
}
Data ke- 0 isinya 70
Data ke- 1 isinya 85
Data ke- 2 isinya 90

Kalau nomor urutnya tidak kamu butuhkan, tulis _ sebagai gantinya. Tanda itu berarti “ada, tapi sengaja tidak dipakai”.

for-underscore.jrg
pub fn main() {
    let nilai = [70, 85, 90]
    var total = 0
    for _, x in nilai {
        total += x
    }
    wok("Total:", total, " Rata-rata:", total as float / len(nilai) as float)
}
Total: 245  Rata-rata: 81.66666666666667
Ditulisx berisiPakai kalau
for x in a0, 1, 2, … (indeks)kamu memang butuh nomor urut
for i, x in aindeks dan isibutuh dua-duanya
for _, x in aisi sajaini yang paling sering kamu mau

Rentang angka juga begitu

1..=5 membuat deretan lima angka. Tapi for n in 1..=5 tetap memberi indeks-nya — yaitu 0 sampai 4.

rentang.jrg
pub fn main() {
    wok_("for n in 1..=5   -> ")
    for n in 1..=5 { wok_(n, " ") }
    wok("")

    wok_("for _, n in 1..=5 -> ")
    for _, n in 1..=5 { wok_(n, " ") }
    wok("")
}
for n in 1..=5   -> 0  1  2  3  4  
for _, n in 1..=5 -> 1  2  3  4  5  

while — selama syarat masih benar

Pakai while kalau kamu tidak tahu berapa kali harus mengulang, hanya tahu kapan harus berhenti.

while.jrg
pub fn main() {
    var sisa = 100
    var langkah = 0
    while sisa > 1 {
        sisa = sisa / 2
        langkah += 1
    }
    wok("Butuh", langkah, "kali dibagi dua")
}
Butuh 6 kali dibagi dua

Keluar lebih awal: break dan continue

Kata kunciArtinya
breakHentikan perulangan sekarang juga
continueLewati sisa badan, lanjut ke putaran berikutnya
break.jrg
pub fn main() {
    let angka = [4, 9, 12, 7, 20]
    for _, n in angka {
        if n % 2 != 0 { continue }   // lewati yang ganjil
        if n > 10 { break }          // berhenti kalau lewat 10
        wok("Genap kecil:", n)
    }
}
Genap kecil: 4

Perulangan bersarang

bersarang.jrg
pub fn main() {
    for _, i in 1..=3 {
        for _, j in 1..=3 {
            wok_(i * j, "\t")
        }
        wok("")
    }
}
1 	2 	3 	
2 	4 	6 	
3 	6 	9 	

Kuis 1

Apa yang dicetak for x in [10, 20, 30] { wok_(x, " ") }?

Kuis 2

Bagaimana cara menjumlahkan isi array a?

Kuis 3

Apa beda break dan continue?

Latihan mandiri

1. Cetak semua bilangan genap dari 1 sampai 20.

2. Hitung berapa banyak angka di [3, 8, 12, 5, 20] yang lebih dari 6.

3. Cetak tabel perkalian 7 (7×1 sampai 7×10).

Jawaban 1: for _, n in 1..=20 { if n % 2 == 0 { wok_(n, " ") } }
Jawaban 2: pakai penghitung var c = 0, lalu for _, n in a { if n > 6 { c += 1 } } → 3.
Jawaban 3: for _, i in 1..=10 { wok("7 x", i, "=", 7 * i) }