if / elif / else

Percabangan if, elif, dan else beserta aturan truthiness pada nilai kosong dan None.

Daftar isi

Percabangan membuat program memilih tindakan yang berbeda berdasarkan keadaan data saat program berjalan. Topik ini membahas pernyataan if, elif, dan else sebagai alat percabangan utama Python, beserta aturan truthiness, yakni penilaian kebenaran yang diberlakukan Python terhadap setiap nilai. Setelah membacanya, rantai keputusan bertingkat dapat disusun dengan urutan kondisi yang benar, dan perilaku program terhadap nilai kosong, angka nol, serta None dapat diprediksi.

Sintaks dasar if dan else#

Pernyataan if menjalankan satu blok kode hanya apabila kondisinya bernilai benar. Kondisi ditulis setelah kata kunci if dan diakhiri titik dua, sedangkan bloknya ditulis menjorok ke dalam, lazimnya empat spasi menurut anjuran PEP 8. Apabila kondisi bernilai salah, blok else yang mengikutinya dijalankan, sedangkan tanpa else program melanjutkan eksekusi ke baris setelah if tanpa melakukan apa pun. Nilai yang digunakan sebagai kondisi tidak harus bertipe bool, karena Python menilai kebenaran setiap nilai secara otomatis. Mekanisme penilaian itu dibahas pada bagian truthiness di bawah.

Struktur paling sederhana hanya memiliki dua jalur, yaitu jalur saat kondisi terpenuhi dan jalur cadangan. Contoh berikut menentukan wujud air pada sebuah suhu.

python Contoh: percabangan if dan else
suhu = 4
if suhu <= 0:
    wujud = "padat"
else:
    wujud = "cair"
print(f"air pada suhu {suhu} derajat celsius berwujud {wujud}")
text Keluaran
air pada suhu 4 derajat celsius berwujud cair

Kondisi suhu <= 0 bernilai salah untuk angka 4, sehingga blok else yang dieksekusi. Perhatikan bahwa blok yang menjorok adalah bagian milik pernyataannya, sedangkan baris print yang sejajar dengan if dijalankan setelah percabangan selesai. Perbedaan satu spasi saja mengubah blok milik siapa, sehingga penjorokan perlu dijaga konsisten empat spasi.

Rantai elif untuk banyak kondisi#

Rantai elif, singkatan dari else if, menambahkan kondisi tambahan antara if dan else. Saat rantai ini dijalankan, kondisi diperiksa berurutan dari atas ke bawah, dan hanya blok milik kondisi benar yang pertama dieksekusi. Kondisi di bawahnya tidak diperiksa lagi meskipun juga bernilai benar, sehingga urutan penulisan kondisi menentukan hasil. Blok else pada akhir rantai bersifat opsional dan menjadi jalur apabila seluruh kondisi di atasnya salah.

Program berikut menetapkan predikat untuk sebuah nilai ujian menurut empat rentang.

python predikat-nilai.py
nilai = 71
if nilai >= 85:
    predikat = "A"
elif nilai >= 75:
    predikat = "B"
elif nilai >= 65:
    predikat = "C"
else:
    predikat = "D"
print(f"nilai {nilai} memperoleh predikat {predikat}")
text Keluaran
nilai 71 memperoleh predikat C

Nilai 71 gagal pada syarat pertama karena lebih kecil dari 85, lalu memenuhi syarat ketiga, yaitu nilai >= 65. Contoh ini juga memperlihatkan sifat berhenti pada kecocokan pertama. Untuk nilai 86, kondisi nilai >= 85 sudah benar sehingga blok predikat A yang dijalankan, dan perbandingan nilai >= 65 yang juga benar tidak pernah diperiksa.

Simpan berkas di atas di direktori kerja, lalu jalankan dengan perintah berikut.

bash
# menjalankan program predikat nilai
python3 predikat-nilai.py
text Keluaran
nilai 71 memperoleh predikat C

Truthiness pada nilai kosong dan None#

Python menilai kebenaran setiap nilai secara implisit apabila nilai itu digunakan sebagai kondisi. Fungsi bool() melakukan penilaian yang sama secara eksplisit, sehingga cocok untuk mengamati aturannya. Nilai-nilai yang kosong dinilai salah, yaitu angka nol dalam semua bentuknya, string kosong, list kosong, dictionary kosong, set kosong, serta konstanta None. Nilai lainnya dianggap benar, termasuk wadah yang berisi satu angka nol sekalipun, karena wadah itu tidak kosong.

python Contoh: penilaian truthiness dengan bool()
print(bool(0), bool(""), bool([]), bool({}), bool(set()))
print(bool(None))
print(bool(7), bool("C"), bool([0]), bool(" "))
text Keluaran
False False False False False
False
True True True True

Baris pertama dan kedua memperlihatkan seluruh kelompok nilai kosong yang dinilai salah. String berisi satu spasi pada baris ketiga tetap dinilai benar karena isinya tidak benar-benar kosong. Aturan ini menjadikan if daftar: sebagai cara singkat untuk memeriksa isi sebuah wadah tanpa memanggil len().

Konstanta None menandakan tidak adanya nilai sama sekali, sedangkan list kosong adalah wadah yang nyata tetapi belum berisi apa pun. Keduanya sama-sama bernilai salah menurut truthiness, tetapi keduanya membawa makna yang berbeda bagi logika program. Karena itu, kondisi if not data: tidak dapat membedakan data yang belum tersedia dari data yang memang kosong.

python Contoh: None dan list kosong sama-sama bernilai salah
data = None
if data:
    print("ada data")
else:
    print("tidak ada data")

data = []
if data:
    print("ada data")
else:
    print("tidak ada data")
text Keluaran
tidak ada data
tidak ada data

Menggabungkan kondisi dengan and, or, dan not#

Tiga operator logika menggabungkan beberapa kondisi menjadi satu. Operator and menghasilkan benar hanya bila kedua sisinya benar, operator or menghasilkan benar bila salah satu sisinya benar, sedangkan not membalik nilai kebenaran sisi yang mengikutinya. Ketiganya dievaluasi dengan teknik short-circuit evaluation, yakni penghentian penilaian begitu hasil akhir ekspresi sudah pasti. Pada and, sisi kedua tidak dinilai bila sisi pertama sudah salah, dan pada or, sisi kedua tidak dinilai bila sisi pertama sudah benar.

Contoh berikut menggabungkan dua syarat kelulusan dan memeriksa hari libur.

python Contoh: gabungan kondisi dengan and dan or
nilai = 82
kehadiran = 0.9
if nilai >= 75 and kehadiran >= 0.8:
    print("lulus dengan syarat terpenuhi")

hari = "Minggu"
if hari == "Sabtu" or hari == "Minggu":
    print("hari libur")
text Keluaran
lulus dengan syarat terpenuhi
hari libur

Sifat penilaian pendek bukan sekadar efisiensi, tetapi juga alat pengaman. Ekspresi pada sisi kedua tidak pernah dijalankan apabila sisi pertama sudah menentukan hasil, sehingga pemeriksaan pengaman dapat diletakkan lebih dulu.

python Contoh: penilaian pendek mencegah pembagian nol
pembagi = 0
if pembagi != 0 and 100 / pembagi > 5:
    print("rasio tinggi")
else:
    print("pembagi nol atau rasio rendah")
text Keluaran
pembagi nol atau rasio rendah

Apabila urutan kondisinya dibalik menjadi 100 / pembagi > 5 and pembagi != 0, pembagian dengan nol dieksekusi lebih dahulu dan program berhenti dengan ZeroDivisionError. Kondisi yang lebih murah dan lebih aman untuk dievaluasi sebaiknya ditulis di sisi kiri and.

Kesalahan umum#

Kesalahan pertama adalah menulis tanda = alih-alih == pada kondisi. Tanda = adalah penugasan nilai, sedangkan perbandingan memerlukan ==. Interpreter menolak program semacam ini sebelum berjalan, dengan pesan yang menunjuk pada sintaks baris tersebut.

Kesalahan kedua adalah menulis rentang kondisi dari yang paling longgar. Rantai elif berhenti pada kondisi benar yang pertama, sehingga kondisi yang lebih sempit tidak pernah tercapai.

python Contoh: urutan kondisi yang keliru
nilai = 86
if nilai >= 65:
    predikat = "C"
elif nilai >= 85:
    predikat = "A"
print(predikat)
text Keluaran
C

Nilai 86 seharusnya memperoleh predikat A, tetapi kondisi nilai >= 65 sudah benar lebih dulu. Susun kondisi rentang dari yang paling ketat ke yang paling longgar agar rantai elif bekerja sesuai maksudnya. Dengan urutan yang benar, kondisi paling longgar hanya dijangkau apabila seluruh syarat di atasnya gagal.

Kesalahan ketiga adalah memperlakukan None dan wadah kosong sebagai hal yang sama. Kondisi if not data: bernilai benar untuk keduanya, sehingga jalur penanganannya ikut tertukar. Apabila pembedaannya penting, periksa None terlebih dahulu dengan is None, baru kemudian kekosongan wadahnya.

python Contoh: pemeriksaan None sebelum kekosongan wadah
data = []
if data is None:
    print("data belum tersedia")
elif not data:
    print("wadah ada tetapi kosong")
text Keluaran
wadah ada tetapi kosong

Ringkasan#

  • Pernyataan if menjalankan bloknya apabila kondisinya benar, dan rantai elif memilih blok milik kondisi benar pertama dari atas ke bawah.
  • Truthiness menilai salah untuk nol, string kosong, wadah kosong, dan None, serta menilai benar untuk nilai lainnya.
  • is None memeriksa ketiadaan nilai secara khusus, sehingga tidak tertukar dengan wadah yang kosong.
  • Operator and, or, dan not menggabungkan kondisi dengan penilaian pendek yang menghentikan evaluasi begitu hasil sudah pasti.

Referensi#