Loop tidak selalu harus berjalan sampai habis. Pencarian stok cukup berhenti begitu barang ditemukan, dan laporan bulanan cukup melewati data yang kosong. Pernyataan break dan continue memberi kendali dua arah tersebut dari dalam loop: break menghentikan loop sepenuhnya, continue melewati satu iterasi dan lanjut ke iterasi berikutnya. Pada Chapter ini kita bedah keduanya, termasuk masalah klasik break pada nested loop — dan solusinya di Python yang tidak mengenal label.
break: Menghentikan Loop Lebih Awal #
Saat interpreter Python mengeksekusi break, loop yang sedang berjalan dihentikan seketika dan eksekusi melompat ke baris pertama setelah blok loop. Sisa elemen yang belum diiterasi tidak pernah diperiksa.
stok = ["pensil", "pulpen", "penghapus", "buku"]
for barang in stok:
print("Memeriksa:", barang)
if barang == "penghapus":
print("Penghapus ditemukan, pencarian dihentikan")
break
print("Selesai mencari")Output yang Dihasilkan:
Memeriksa: pensil
Memeriksa: pulpen
Memeriksa: penghapus
Penghapus ditemukan, pencarian dihentikan
Selesai mencariMari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 3 (
for barang in stok:): loop memeriksa item satu per satu dan mencetak tiap pemeriksaan. - Baris 5 (
if barang == "penghapus":): pada iterasi ketiga, kondisi bernilaiTrue. - Baris 7 (
break): loop berhenti — elemen"buku"tidak pernah diperiksa karena barang sudah ditemukan.
Tanpa break, pencarian tetap memeriksa "buku" meskipun hasilnya sudah tidak dibutuhkan. Pada koleksi kecil dampaknya tak terasa; pada data jutaan baris, break menghemat waktu eksekusi secara nyata.
continue: Melewati Sisa Iterasi #
Berbeda dengan break, pernyataan continue hanya melemparkan eksekusi ke iterasi berikutnya — sisa kode dalam blok setelah continue dilewati, tetapi loop tetap berjalan. Pola ini cocok untuk menyaring data yang tidak relevan:
ganjil = []
for angka in range(1, 8):
if angka % 2 == 0:
continue
ganjil.append(angka)
print("Angka ganjil:", ganjil)Output yang Dihasilkan:
Angka ganjil: [1, 3, 5, 7]Ketika angka % 2 == 0 bernilai True (angka genap), continue langsung melompat ke angka berikutnya, sehingga baris ganjil.append(angka) hanya tereksekusi untuk angka ganjil. Perbedaan peran keduanya:
| Aspek | break | continue |
|---|---|---|
| Dampak ke loop | loop berhenti total | iterasi saat ini dilewati |
| Sisa elemen | tidak diproses | tetap diproses |
| Kegunaan umum | pola pencarian | pola penyaringan |
break pada Nested Loop #
Bahasa seperti Java memiliki labeled break untuk keluar dari beberapa tingkat loop sekaligus. Python tidak mengenal label maupun goto — break hanya menghentikan loop terdalam yang membungkusnya. Solusi standarnya adalah flag variable yang diperiksa oleh loop luar:
matriks = [
[3, 1, 7],
[8, 5, 2],
[4, 9, 6],
]
target = 5
ditemukan = False
for baris in matriks:
for angka in baris:
if angka == target:
ditemukan = True
break
if ditemukan:
break
if ditemukan:
print(f"Angka {target} ditemukan di dalam matriks")
else:
print(f"Angka {target} tidak ada di dalam matriks")Output yang Dihasilkan:
Angka 5 ditemukan di dalam matriksMari kita telaah alur flag pada kode di atas:
- Baris 7 (
ditemukan = False): flag diinisialisasi sebelum loop dimulai. - Baris 12 (
ditemukan = True): begitu angka5ditemukan, flag diubah menjadiTruelalubreakkeluar dari loop dalam. - Baris 14 (
if ditemukan: break): loop luar memeriksa flag dan ikut berhenti — tanpa pemeriksaan ini, loop luar tetap memproses baris ketiga. - Baris 17 (
if ditemukan:): setelah kedua loop selesai, flag menjadi satu-satunya sumber kebenaran hasil pencarian.
Alternatif: Pindahkan ke Function #
Versi flag membutuhkan dua pemeriksaan berbeda. Bila logika pencarian dipindahkan ke dalam function, pernyataan return mengeluarkan eksekusi dari semua tingkat loop sekaligus:
def cari_angka(matriks, target):
for baris in matriks:
for angka in baris:
if angka == target:
return True
return False
matriks = [
[3, 1, 7],
[8, 5, 2],
[4, 9, 6],
]
print(cari_angka(matriks, 5))
print(cari_angka(matriks, 100))Output yang Dihasilkan:
True
FalseSaat return True tereksekusi pada baris ke-4 function cari_angka(), kedua loop berhenti bersamaan tanpa flag tambahan. Baris return False hanya tercapai bila seluruh elemen sudah diperiksa dan target tidak pernah ditemukan.
Kita sudah bisa menghentikan dan menyaring loop. Selanjutnya kita bahas pernyataan yang tampak tidak melakukan apa pun tetapi justru penting bagi kerangka program pada Chapter pass.