Break dan Continue di Rust
break dan continue memungkinkan kamu memotong sebuah perulangan (loop) lebih awal, alih-alih selalu menjalankannya sampai selesai. Keduanya bekerja dengan cara yang sama di ketiga jenis perulangan: loop, while, dan for.
break — keluar dari perulangan sepenuhnya
Section titled “break — keluar dari perulangan sepenuhnya”break langsung menghentikan perulangan, dan eksekusi melompat ke kode tepat setelah perulangan itu:
fn main() { for i in 1..=10 { if i == 5 { break; } println!("{i}"); }}Output:
1234Walaupun range-nya sampai 10, perulangannya berhenti begitu i mencapai 5.
continue — lompat ke putaran berikutnya
Section titled “continue — lompat ke putaran berikutnya”continue melewati sisa putaran yang sedang berjalan dan langsung lompat ke putaran berikutnya, tanpa menghentikan perulangannya:
fn main() { for i in 1..=10 { if i % 2 == 0 { continue; // lewati bilangan genap } println!("{i}"); }}Output:
13579Setiap bilangan genap dilewati: continue dijalankan, dan perulangan langsung pindah ke nilai i berikutnya tanpa menjalankan println!.
Perulangan berlabel
Section titled “Perulangan berlabel”Kalau kamu menaruh satu perulangan di dalam perulangan lain (bersarang), break/continue biasa hanya berpengaruh pada perulangan yang paling dalam. Kalau kamu perlu keluar dari perulangan luar dari dalam perulangan bersarang, beri perulangan luar sebuah label (ditulis 'name:):
fn main() { 'outer: for x in 1..=3 { for y in 1..=3 { if x * y > 4 { break 'outer; } println!("{x} x {y} = {}", x * y); } }}Output:
1 x 1 = 11 x 2 = 21 x 3 = 32 x 1 = 22 x 2 = 4Tanpa label, break hanya menghentikan perulangan y di dalam, dan x akan terus berjalan. break 'outer; menghentikan keduanya sekaligus. continue 'outer; bekerja dengan cara yang sama, kalau kamu ingin lompat ke putaran berikutnya dari perulangan luar alih-alih berhenti total.
Jebakan continue di perulangan while
Section titled “Jebakan continue di perulangan while”Di perulangan for, nilai berikutnya otomatis datang dari range, jadi continue selalu aman. Perulangan while berbeda: kamu sendiri yang memperbarui penghitungnya, biasanya di bagian bawah isi perulangan. Kalau continue melompati pembaruan itu, penghitungnya tidak pernah berubah dan perulangannya berjalan selamanya.
Versi ini mencoba melewati angka 3, tapi malah macet. Jangan dijalankan:
fn main() { let mut i = 0; while i < 5 { if i == 3 { continue; // ❌ lompat kembali ke atas tanpa mengubah i } println!("{i}"); i += 1; }}Saat i bernilai 3, continue kembali ke kondisi. i masih 3, jadi continue jalan lagi, dan lagi, selamanya. Solusinya adalah memperbarui penghitung sebelum kode apa pun yang mungkin memanggil continue:
fn main() { let mut i = 0; while i < 5 { i += 1; // perbarui dulu, supaya continue tidak bisa melewatinya if i == 3 { continue; } println!("{i}"); }}Output:
1245Memindahkan i += 1 ke atas menggeser angkanya satu: perulangan ini mencetak 1 sampai 5, bukan 0 sampai 4, jadi sesuaikan nilai awal atau kondisinya kalau kamu butuh rentang yang lama. Lebih baik lagi, kalau kamu hanya sedang menghitung, pakai perulangan for pada sebuah range, dan masalah ini tidak mungkin terjadi.
Latihan
Section titled “Latihan”1. Lewati kelipatan 3
Section titled “1. Lewati kelipatan 3”Cetak angka 1 sampai 10, tapi lewati setiap kelipatan 3. Petunjuk: sebuah angka adalah kelipatan 3 kalau n % 3 == 0. Pakai continue untuk melewatinya.
Lihat solusi
fn main() { for n in 1..=10 { if n % 3 == 0 { continue; } println!("{n}"); }}Output:
124578102. Cari pasangan yang hasil kalinya 24
Section titled “2. Cari pasangan yang hasil kalinya 24”Pakai dua perulangan for bersarang, x dan y, keduanya pada 1..=9. Temukan pasangan pertama yang memenuhi x * y == 24, cetak pasangan itu, lalu hentikan kedua perulangan. Petunjuk: beri label pada perulangan luar dan pakai break 'outer;.
Lihat solusi
fn main() { 'outer: for x in 1..=9 { for y in 1..=9 { if x * y == 24 { println!("Ketemu: {x} x {y} = 24"); break 'outer; } } } println!("Pencarian selesai");}Output:
Ketemu: 3 x 8 = 24Pencarian selesaiCoba ganti break 'outer; menjadi break; biasa. Sekarang hanya perulangan dalam yang berhenti, jadi pencariannya terus berjalan dan juga mencetak 4 x 6, 6 x 4, dan 8 x 3.
Ringkasan
Section titled “Ringkasan”breaklangsung keluar dari perulangan.continuemelewati sisa putaran (iterasi) saat ini dan pindah ke putaran berikutnya.- Label (
'outer:) membuatbreak/continuebisa menargetkan perulangan luar dari dalam perulangan bersarang. - Di perulangan
while, perbarui penghitungmu sebelumcontinuemana pun, kalau tidak perulangannya bisa macet selamanya.
Kuis singkat
Section titled “Kuis singkat”Kuis singkat
1. Apa yang dilakukan continue di dalam sebuah perulangan?
2. Bagaimana cara menulis label pada perulangan supaya break bisa menargetkannya dari perulangan bersarang?
3. Sebuah perulangan while yang memakai continue tidak pernah selesai. Apa penyebab yang paling mungkin?
Skor: 0 / 3
Bacaan lebih lanjut
Section titled “Bacaan lebih lanjut”- Loop Labels to Disambiguate Between Multiple Loops — The Rust Book (bahasa Inggris): pengenalan resmi tentang label, dengan contoh hitung mundur bersarang.
- Nesting and labels — Rust by Example (bahasa Inggris): contoh singkat yang bisa dijalankan untuk
break 'outerdancontinue 'outer. - Loop Labels — The Rust Reference (bahasa Inggris): aturan persis tentang di mana label boleh dipakai.
- Ekspresi
break— The Rust Reference (bahasa Inggris): cara kerjabreak, termasukbreakdengan nilai. - Ekspresi
continue— The Rust Reference (bahasa Inggris): apa yang dilakukancontinuedi setiap jenis perulangan.