Lewati ke konten

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:

1
2
3
4
▶ Coba sendiri

Walaupun range-nya sampai 10, perulangannya berhenti begitu i mencapai 5.

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:

1
3
5
7
9
▶ Coba sendiri

Setiap bilangan genap dilewati: continue dijalankan, dan perulangan langsung pindah ke nilai i berikutnya tanpa menjalankan println!.

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 = 1
1 x 2 = 2
1 x 3 = 3
2 x 1 = 2
2 x 2 = 4
▶ Coba sendiri

Tanpa 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.

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:

1
2
4
5
▶ Coba sendiri

Memindahkan 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.

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:

1
2
4
5
7
8
10
▶ Coba sendiri

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 = 24
Pencarian selesai
▶ Coba sendiri

Coba 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.

  • break langsung keluar dari perulangan.
  • continue melewati sisa putaran (iterasi) saat ini dan pindah ke putaran berikutnya.
  • Label ('outer:) membuat break/continue bisa menargetkan perulangan luar dari dalam perulangan bersarang.
  • Di perulangan while, perbarui penghitungmu sebelum continue mana pun, kalau tidak perulangannya bisa macet selamanya.

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