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).
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:
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 90Kalau nomor urutnya tidak kamu butuhkan, tulis _ sebagai gantinya. Tanda itu berarti “ada, tapi sengaja tidak dipakai”.
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| Ditulis | x berisi | Pakai kalau |
|---|---|---|
for x in a | 0, 1, 2, … (indeks) | kamu memang butuh nomor urut |
for i, x in a | indeks dan isi | butuh dua-duanya |
for _, x in a | isi saja | ini 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.
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.
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 duaKeluar lebih awal: break dan continue
| Kata kunci | Artinya |
|---|---|
break | Hentikan perulangan sekarang juga |
continue | Lewati sisa badan, lanjut ke putaran berikutnya |
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: 4Perulangan bersarang
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, " ") }?
Tepat — satu nama berarti indeks. Ini jebakan JRG yang paling sering memakan korban.
Ingat aturannya: satu nama sesudah for selalu berisi nomor urut.
Kuis 2
Bagaimana cara menjumlahkan isi array a?
Betul. _ membuang indeksnya, x menerima isinya.
Pilihan pertama menjumlahkan indeks (0+1+2+…), bukan isinya — dan tidak ada yang memberitahumu.
Kuis 3
Apa beda break dan continue?
Tepat.
break menghentikan; continue melompati sisa badan putaran ini saja.
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).
for _, n in 1..=20 { if n % 2 == 0 { wok_(n, " ") } }var c = 0, lalu for _, n in a { if n > 6 { c += 1 } } → 3.for _, i in 1..=10 { wok("7 x", i, "=", 7 * i) }