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:
for angka in [1, 3, 5]:
print("Memeriksa:", angka)
else:
print("Loop selesai tanpa break")Output yang Dihasilkan:
Memeriksa: 1
Memeriksa: 3
Memeriksa: 5
Loop selesai tanpa breakSekarang bandingkan dengan loop yang berhenti melalui break:
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:
Memeriksa: 1
Memeriksa: 3
Memeriksa: 7
Angka 7 ditemukan, loop dihentikanPada 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:
sisa_langkah = 3
while sisa_langkah > 0:
print("Sisa langkah:", sisa_langkah)
sisa_langkah -= 1
else:
print("Baterai habis, robot berhenti")Output yang Dihasilkan:
Sisa langkah: 3
Sisa langkah: 2
Sisa langkah: 1
Baterai habis, robot berhentiKetika 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:
for item in []:
print("Baris ini tidak pernah tercetak")
else:
print("Koleksi kosong: blok else tetap dieksekusi")Output yang Dihasilkan:
Koleksi kosong: blok else tetap dieksekusiTidak 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.
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:
Siti sudah terdaftar
Rina belum terdaftar, silakan daftarMari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 3-6 (pencarian Siti): nama
"Siti"ditemukan pada iterasi kedua,breaktereksekusi, blokelsepertama dilewati. - Baris 10-13 (pencarian Rina): tidak ada elemen yang cocok, loop habis secara normal, blok
elsekedua 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:
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:
Rina belum terdaftar, silakan daftarKeduanya 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.