Sepanjang Section ini kita telah mengumpulkan seluruh struktur pengatur alur: if/elif/else, match-case, for, while, range(), break, continue, pass, sampai blok else pada loop. Semuanya sah; masalahnya kini berpindah dari “bagaimana cara memakainya” menjadi “struktur mana yang tepat untuk masalah ini”. Kode yang memilih struktur yang tepat terasa datar dan mudah diikuti; kode yang salah memilih terasa seperti membaca teka-teki. Chapter penutup ini merangkum keputusan tersebut ke dalam tabel dan diagram, lalu menutup dengan prinsip keterbacaan yang berlaku lintas struktur.
Tabel Keputusan #
Tabel berikut memetakan situasi umum ke struktur yang paling menyuarakannya:
| Situasi | Struktur | Alasan singkat |
|---|---|---|
| Memilih cabang berdasarkan rentang atau kondisi bebas | if/elif/else | kondisi berupa expression apa pun |
| Mencocokkan satu nilai ke banyak kemungkinan pasti | match-case | pola literal lebih ringkas (Python 3.10+) |
| Membongkar struktur tuple, list, atau dictionary | match-case | pattern matching menggantikan pembongkaran manual |
| Mengolah setiap elemen koleksi | for | iterasi langsung, tanpa counter |
| Deret angka berurutan naik atau turun | for + range() | range() menyediakan deretnya |
| Jumlah iterasi baru diketahui saat berjalan | while | loop dikendalikan kondisi, bukan data |
| Pola “ulangi sampai valid / berhasil” | while + break | break menjadi jalan keluarnya |
| Berhenti lebih awal saat hasil sudah cukup | break | sisa iterasi tidak perlu diproses |
| Melewati iterasi yang tidak relevan | continue | loop tetap berlanjut |
| Kerangka blok yang isinya menyusul | pass | blok kosong tidak sah di Python |
| Pekerjaan setelah pencarian gagal | loop else atau flag | baca Chapter else pada Loop untuk trade-off-nya |
for vs while #
Kedua loop ini bisa saling menggantikan, tetapi kode yang tepat menyatakan alasan pengulangannya. for menyatakan “sekali untuk setiap elemen”; while menyatakan “selama kondisi ini masih benar”:
# for: jumlah pengulangan sudah diketahui dari data
total_for = 0
for angka in [10, 20, 30]:
total_for += angka
print("Total (for):", total_for)
# while: jumlah pengulangan bergantung pada kondisi
total_while = 0
angka = 10
while angka <= 30:
total_while += angka
angka += 10
print("Total (while):", total_while)Output yang Dihasilkan:
Total (for): 60
Total (while): 60Keduanya menghasilkan angka yang sama, tetapi versi for membaca seperti kalimat: “jumlahkan setiap angka dalam daftar”. Versi while menuntut pembaca memeriksa tiga bagian (inisialisasi angka = 10, kondisi angka <= 30, update angka += 10) untuk memastikan loop berhenti. Bila data pengulangannya sudah ada, pilih for; simpan while untuk kondisi runtime.
if/elif vs match-case #
Pilihan percabangan mengikuti bentuk kondisinya, bukan selera:
# if/elif: cocok untuk rentang nilai
nilai = 85
if nilai >= 90:
grade = "A"
elif nilai >= 80:
grade = "B"
else:
grade = "C"
print("Grade:", grade)
# match-case: cocok untuk struktur data
perintah = ("transfer", 150000)
match perintah:
case ("transfer", jumlah):
print(f"Transfer Rp{jumlah}")
case ("cek", _):
print("Menampilkan saldo")Output yang Dihasilkan:
Grade: B
Transfer Rp150000Kondisi nilai >= 80 adalah pertanyaan tentang rentang — wilayah if/elif. Sebaliknya, case ("transfer", jumlah) adalah pertanyaan tentang bentuk data — wilayah match-case. Menulis pola case n if n >= 80 untuk kasus pertama tetap sah, tetapi guard yang panjang menghapus keunggulan keterbacaan match.
Diagram Keputusan #
Alur memilih struktur dapat dirangkum menjadi satu diagram:
Diagram ini bukan hukum keras, melainkan titik mulai: keputusan akhir tetap kembali pada struktur yang paling mudah dibaca oleh rekan tim.
Prinsip Keterbacaan #
Struktur yang tepat akan sia-sia bila kondisinya sendiri tidak terbaca. Tiga kebiasaan berikut menjaga cabang dan loop tetap jelas:
- Beri nama pada kondisi penting. Boolean bernama mengubah baris logika menjadi kalimat yang bisa dibaca tanpa membedah operator:
stok = 5
toko_sedang_buka = True
bisa_dipesan = stok > 0 and toko_sedang_buka
if bisa_dipesan:
print("Pesanan diproses")
else:
print("Tidak bisa memesan sekarang")Output yang Dihasilkan:
Pesanan diproses- Ratakan kondisi berlapis. Kombinasi
and/ordan guard clause lebih mudah dibaca daripadaifbertingkat — teknik lengkapnya ada pada Chapter Nested Conditions. - Jaga loop tetap pendek. Loop yang melebihi satu layar biasanya membawa dua tanggung jawab sekaligus; pisahkan menjadi function dengan nama yang menjelaskan.
Inti dari seluruh Section ini sederhana: control flow yang baik membuat pembaca berhenti memikirkan sintaks dan langsung melihat maksud program. Latih kepekaan tersebut dengan membaca ulang kode sendiri — bila butuh menarik napas panjang untuk memahami satu cabang, itu pertanda strukturnya perlu dipertukarkan.