Di hampir semua bahasa pemrograman, else hanya berpasangan dengan if. Python punya keunikan: for dan while juga boleh memiliki blok else — dan semantiknya sering disalahpahami bahkan oleh pemrogram Python berpengalaman. Blok else pada loop dieksekusi hanya bila loop selesai tanpa break. Pada Chapter ini kita bedah semantik tersebut perlahan dengan eksperimen langsung, melihat pola pencarian yang menjadi kasus penggunaan terbaiknya, dan membandingkannya dengan alternatif yang lebih eksplisit.

Semantik: else Berarti “Selesai Tanpa break” #

Blok else pada loop tidak berhubungan dengan kondisi True atau False. Aturannya tunggal: blok else berjalan bila loop berakhir secara normal — semua elemen habis diiterasi atau kondisi while akhirnya bernilai False — tanpa pernah mengeksekusi break.

Pertama, loop tanpa break:

python
for angka in [1, 3, 5]:
    print("Memeriksa:", angka)
else:
    print("Loop selesai tanpa break")

Output yang Dihasilkan:

text
Memeriksa: 1
Memeriksa: 3
Memeriksa: 5
Loop selesai tanpa break

Sekarang bandingkan dengan loop yang berhenti melalui break:

python
for angka in [1, 3, 7, 5]:
    print("Memeriksa:", angka)
    if angka == 7:
        print("Angka 7 ditemukan, loop dihentikan")
        break
else:
    print("Baris ini tidak pernah tercetak")

Output yang Dihasilkan:

text
Memeriksa: 1
Memeriksa: 3
Memeriksa: 7
Angka 7 ditemukan, loop dihentikan

Pada contoh kedua, elemen 7 ditemukan dan break tereksekusi — blok else pun dilewati sepenuhnya meskipun tertulis persis setelah loop. Kata “else” memang menyesatkan: membacanya sebagai “kalau tidak ditemukan” jauh lebih dekat ke maknanya daripada “kondisi gagal”.

while juga Bisa else #

Aturan yang sama berlaku untuk while: blok else berjalan bila kondisi while akhirnya bernilai False dengan cara apa pun — termasuk kondisi yang False sejak iterasi pertama:

python
sisa_langkah = 3

while sisa_langkah > 0:
    print("Sisa langkah:", sisa_langkah)
    sisa_langkah -= 1
else:
    print("Baterai habis, robot berhenti")

Output yang Dihasilkan:

text
Sisa langkah: 3
Sisa langkah: 2
Sisa langkah: 1
Baterai habis, robot berhenti

Ketika sisa_langkah mencapai 0, kondisi sisa_langkah > 0 bernilai False dan loop berakhir secara normal, sehingga blok else dieksekusi.

Satu kejutan terakhir dari semantik ini: loop yang tidak pernah menjalankan isi bloknya tetap dianggap selesai secara normal. Koleksi kosong, misalnya, langsung melompat ke blok else:

python
for item in []:
    print("Baris ini tidak pernah tercetak")
else:
    print("Koleksi kosong: blok else tetap dieksekusi")

Output yang Dihasilkan:

text
Koleksi kosong: blok else tetap dieksekusi

Tidak ada elemen yang diiterasi, jadi tidak ada kesempatan bagi break untuk tereksekusi — syarat “selesai tanpa break” pun terpenuhi sejak awal. Perilaku ini penting diingat ketika menulis else yang seharusnya berarti “pencarian gagal”: koleksi kosong tetap dihitung sebagai pencarian yang selesai, bukan gagal.

Pola Pencarian: else sebagai “Tidak Ditemukan” #

Kasus penggunaan terbaik loop-else adalah pola pencarian: break saat data ditemukan, else menangani kegagalan pencarian.

python
peserta = ["Budi", "Siti", "Andi"]

for nama in peserta:
    if nama == "Siti":
        print("Siti sudah terdaftar")
        break
else:
    print("Siti belum terdaftar, silakan daftar")

for nama in peserta:
    if nama == "Rina":
        print("Rina sudah terdaftar")
        break
else:
    print("Rina belum terdaftar, silakan daftar")

Output yang Dihasilkan:

text
Siti sudah terdaftar
Rina belum terdaftar, silakan daftar

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

  1. Baris 3-6 (pencarian Siti): nama "Siti" ditemukan pada iterasi kedua, break tereksekusi, blok else pertama dilewati.
  2. Baris 10-13 (pencarian Rina): tidak ada elemen yang cocok, loop habis secara normal, blok else kedua dieksekusi dan mencetak pesan “belum terdaftar”.

Alternatif yang Lebih Eksplisit #

Bila kejelasan tim lebih penting daripada kepadaman sintaks, flag variable menggantikan blok else dengan percabangan biasa:

python
peserta = ["Budi", "Siti", "Andi"]
ditemukan = False

for nama in peserta:
    if nama == "Rina":
        ditemukan = True
        break

if ditemukan:
    print("Rina sudah terdaftar")
else:
    print("Rina belum terdaftar, silakan daftar")

Output yang Dihasilkan:

text
Rina belum terdaftar, silakan daftar

Keduanya menghasilkan perilaku identik. Versi loop-else menempelkan keputusan langsung ke loop tanpa variabel tambahan; versi flag membutuhkan lebih banyak baris tetapi tidak memerlukan pengetahuan khusus untuk dibaca. Untuk pencarian sederhana, Python juga menyediakan operator in seperti if "Rina" in peserta: yang kita bahas pada Chapter Operator Keanggotaan — pilihan paling ringkas ketika cukup sekadar tahu ada atau tidak.

Baik memakai loop-else maupun flag, keduanya sah secara bahasa. Yang penting diputuskan secara sadar: pilih struktur yang dapat dipahami rekan tim tanpa perlu membuka ulang dokumentasi.