break & continue
Mengendalikan loop: break untuk berhenti, continue untuk lompat.
Rem darurat untuk perulangan
Kadang di tengah perulangan kamu ingin berhenti total atau melewati satu putaran. break menghentikan loop seketika, continue melompati sisa putaran saat ini dan lanjut ke putaran berikutnya.
Analogi: kamu sedang antre panjang di kasir. break itu seperti memutuskan pulang, antrean selesai bagimu. continue itu seperti mempersilakan satu orang lewat dulu karena barangnya sedikit, lalu kamu lanjut antre.
Kenapa break dan continue ada?
Tanpa keduanya, satu-satunya cara menghentikan loop adalah menunggu kondisi false, yang kadang tidak praktis. Contoh: mencari nama di daftar 1000 orang, begitu ketemu di urutan ke-5, ngapain lanjut 995 sisanya? break menghemat kerja.
break: berhenti total
void main() {
var buah = ['apel', 'mangga', 'durian', 'pisang', 'anggur'];
for (var b in buah) {
if (b == 'durian') {
print('Ketemu durian! Berhenti mencari.');
break; // keluar dari loop SEKARANG
}
print('Bukan durian: $b');
}
print('Pencarian selesai.');
}Output: "Bukan durian: apel", "Bukan durian: mangga", "Ketemu durian! Berhenti mencari.", "Pencarian selesai." Begitu break dieksekusi, loop langsung mati dan program lanjut ke baris setelah loop.
continue: lewati satu putaran
void main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // lewati angka genap, langsung ke i berikutnya
}
print('Ganjil: $i');
}
}Hanya angka ganjil yang tercetak. Saat i genap, continue melompati print dan lompat ke update i++ lalu putaran berikutnya.
Contoh kedua yang realistis, memproses data dengan melewati yang rusak:
void main() {
var nilai = [85, -1, 90, -1, 75]; // -1 berarti data rusak
int total = 0;
int jumlahValid = 0;
for (var n in nilai) {
if (n < 0) {
print('Data rusak dilewati: $n');
continue;
}
total += n;
jumlahValid++;
}
print('Rata-rata nilai valid: ${total / jumlahValid}');
}Tanpa continue, kamu harus membungkus sisa logika dalam if (n >= 0) { ... } yang membuat indentasi makin dalam. continue menjaga kode tetap datar dan mudah dibaca.
break di loop bersarang dan label
break biasa hanya menghentikan loop terdalam. Untuk loop bersarang, Dart punya label:
void main() {
luar:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
print('Berhenti total di i=2, j=2');
break luar; // menghentikan KEDUA loop
}
print('i=$i, j=$j');
}
}
print('Keluar dari semua loop.');
}Label (luar:) memberi nama pada loop sehingga break luar tahu loop mana yang dimaksud. Jarang dipakai, tapi bagus diketahui.
Kesalahan umum pemula
1. break di luar loop
// SALAH
void main() {
int x = 5;
// if (x > 3) {
// break; // ERROR: break hanya untuk loop dan switch
// }
}// BENAR
void main() {
for (int i = 0; i < 10; i++) {
if (i > 3) {
break; // berhenti di i=4
}
print(i);
}
}2. continue yang membuat update terlewat di while
// SALAH: continue melompati angka++, loop tak berujung!
void main() {
int i = 0;
while (i < 5) {
if (i == 2) {
continue; // angka++ di bawah tidak pernah tercapai saat i=2
}
print(i);
i++;
}
}// BENAR: update sebelum continue
void main() {
int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue;
}
print(i);
}
}Ini jebakan klasik: di for, update selalu jalan walau ada continue. Di while, update ada di badan loop sehingga bisa terlewat.
3. Memakai break padahal kondisi loop cukup
// Bisa, tapi kurang jelas
void main() {
for (int i = 0; i < 10; i++) {
if (i >= 5) break;
print(i);
}
}// LEBIH JELAS
void main() {
for (int i = 0; i < 5; i++) {
print(i);
}
}Gunakan break untuk kondisi berhenti yang ditemukan di tengah jalan (mis. data ketemu), bukan untuk batas yang sudah diketahui sejak awal.
Kesimpulan
break = berhenti total dari loop, continue = lewati putaran ini saja. Keduanya membuat loop lebih ekspresif, tapi waspadai interaksi continue dengan update manual di while.
Catatan teknis:
breakdancontinuejuga berlaku diswitch(break) dan label bisa dipakai untuk continue ke loop luar. Di Dart modern, switch expression dengan=>tidak butuh break sama sekali.
Tantangan
Saring bilangan
Cetak angka 1-20, tapi lewati kelipatan 3 (continue) dan berhenti total saat mencapai 17 (break).
void main() {
// TODO
}