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.

python
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:

text
Memeriksa: pensil
Memeriksa: pulpen
Memeriksa: penghapus
Penghapus ditemukan, pencarian dihentikan
Selesai mencari

Mari kita telaah apa yang terjadi pada baris-baris kode di atas:

  1. Baris 3 (for barang in stok:): loop memeriksa item satu per satu dan mencetak tiap pemeriksaan.
  2. Baris 5 (if barang == "penghapus":): pada iterasi ketiga, kondisi bernilai True.
  3. 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:

python
ganjil = []

for angka in range(1, 8):
    if angka % 2 == 0:
        continue
    ganjil.append(angka)

print("Angka ganjil:", ganjil)

Output yang Dihasilkan:

text
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:

Aspekbreakcontinue
Dampak ke looploop berhenti totaliterasi saat ini dilewati
Sisa elementidak diprosestetap diproses
Kegunaan umumpola pencarianpola 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:

python
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:

text
Angka 5 ditemukan di dalam matriks

Mari kita telaah alur flag pada kode di atas:

  1. Baris 7 (ditemukan = False): flag diinisialisasi sebelum loop dimulai.
  2. Baris 12 (ditemukan = True): begitu angka 5 ditemukan, flag diubah menjadi True lalu break keluar dari loop dalam.
  3. Baris 14 (if ditemukan: break): loop luar memeriksa flag dan ikut berhenti — tanpa pemeriksaan ini, loop luar tetap memproses baris ketiga.
  4. 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:

python
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:

text
True
False

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