Bab 2: Kontrol Alur Program¶
Programmer pemula menulis kode yang berjalan dari atas ke bawah. Programmer yang lebih jago bisa menyuruh kode untuk memilih dan mengulang.
Di Bab 1, semua program kita berjalan lurus — baris demi baris dari atas ke bawah. Itu cuma 5% dari kekuatan pemrograman. Kekuatan sebenarnya muncul saat program bisa:
- Memilih: kalau kondisi A, lakukan X. Kalau B, lakukan Y.
- Mengulang: kerjakan ini 100 kali. Atau, kerjakan terus sampai kondisi tertentu terpenuhi.
Itulah kontrol alur program (flow control) — topik bab ini.
Setelah Bab 2, kamu akan bisa:
- Membuat program mengambil keputusan dengan
if,elif,else - Mengulang sesuatu dengan
fordanwhile - Memahami nilai Boolean dan operator perbandingan
- Mengerti kapan pakai
forvswhile - Menulis program yang interaktif dan responsif
2.1. Boolean — Tipe Data Ketiga¶
Di Bab 1, kita kenal tiga tipe: int, float, dan str. Sekarang tipe keempat — yang paling penting untuk kontrol alur:
Boolean (bool) — tipe data yang hanya punya dua nilai: True (benar) atau False (salah).
Perhatikan huruf besar
True dan False ditulis dengan huruf besar di awal. true dan false (huruf kecil) bukan Boolean — Python akan protes.
Boolean kelihatan sederhana, tapi dia adalah bahasa keputusan komputer. Setiap kali program bertanya "lakukan A atau B?", jawabannya selalu di-reduksi menjadi True atau False.
2.2. Operator Perbandingan¶
Operator perbandingan menghasilkan Boolean. Kamu sudah kenal mereka dari matematika.
| Operator | Arti | Contoh |
|---|---|---|
== |
Sama dengan | 5 == 5 → True |
!= |
Tidak sama dengan | 5 != 3 → True |
< |
Lebih kecil | 3 < 5 → True |
> |
Lebih besar | 5 > 3 → True |
<= |
Lebih kecil atau sama | 5 <= 5 → True |
>= |
Lebih besar atau sama | 5 >= 6 → False |
Coba di prompt:
>>> 42 == 42
True
>>> 42 == 99
False
>>> 2 != 3
True
>>> "halo" == "halo"
True
>>> "Halo" == "halo"
False
Perhatikan baris terakhir — Python case-sensitive. "Halo" dan "halo" dianggap dua string berbeda.
= vs == — kesalahan paling sering pemula
=artinya assignment — masukkan nilai ke variable. "umur = 25" artinya isi variableumurdengan 25.==artinya perbandingan — apakah dua nilai sama? HasilnyaTrueatauFalse.
Salah satu kesalahan paling sering pemula adalah menulis = saat maksudnya ==:
Membandingkan Tipe Berbeda¶
Python ketat soal tipe. Membandingkan integer dengan integer atau string dengan string aman. Tapi:
42 == "42"→False. Integer dan string adalah dua dunia berbeda.42 == 42.0→True. Integer dan float bisa dibandingkan karena keduanya angka.
Aturannya: kalau ragu, ubah dulu ke tipe yang sama sebelum membandingkan.
2.3. Operator Boolean¶
Kadang satu kondisi tidak cukup. Kamu mau cek "apakah umur ≥ 17 DAN punya KTP". Untuk gabungkan kondisi, pakai operator Boolean:
| Operator | Arti |
|---|---|
and |
Kedua kondisi harus benar |
or |
Salah satu kondisi benar saja sudah cukup |
not |
Membalikkan: True jadi False, False jadi True |
and — Semua harus benar¶
Contoh nyata:
or — Cukup salah satu¶
Contoh:
not — Pembalik¶
not berguna saat kamu ingin menulis kondisi sebagai negasi. "Kalau TIDAK hujan, ayo keluar":
Lebih natural daripada hujan == False.
Menggabungkan Operator¶
Kamu bisa kombinasikan operator-operator di atas:
>>> umur = 25
>>> punya_sim = True
>>> punya_helm = False
>>> umur >= 17 and punya_sim and punya_helm
False
Salah satu kondisi (punya_helm) False, jadi and keseluruhan False.
Aturan urutan
Persis seperti matematika punya "kali sebelum tambah", Boolean operator punya urutan:
notdievaluasi pertama- Lalu
and - Terakhir
or
Kalau ragu, pakai kurung. Selalu lebih jelas:
2.4. Statement if — Pengambilan Keputusan¶
Sekarang kita masuk ke topik utama. Statement if membuat program bisa memilih.
Bentuk dasar:
Contoh:
Kalau pengguna mengetik "Alice" (persis, case-sensitive), program akan menyapa. Kalau bukan, baris print itu di-skip.
Indentasi — Aturan Wajib¶
Perhatikan spasi sebelum print di kode di atas. Itu disebut indentasi.
Di banyak bahasa pemrograman, indentasi cuma untuk kerapian. Di Python, indentasi WAJIB dan menentukan struktur program. Aturan:
- Gunakan 4 spasi sebagai standar
- Editor (VS Code, dll) biasanya otomatis mengubah Tab jadi 4 spasi
- Konsisten — jangan campur 4 spasi dan 2 spasi di satu file
Tanpa indentasi yang benar, Python akan error:
Kenapa harus indentasi?
Python melarang banyak kebiasaan buruk dengan memaksa indentasi. Hasilnya: kode Python dari programmer manapun terlihat seragam dan mudah dibaca.
else — Kalau Tidak¶
Sering kali kamu mau bilang "kalau begini, lakukan X. Kalau tidak, lakukan Y". Untuk itu pakai else:
nama = input("Siapa nama kamu? ")
if nama == "Alice":
print("Halo Alice!")
else:
print("Halo, orang asing.")
else tidak butuh kondisi — dia akan jalan kalau semua if di atasnya False.
elif — Banyak Cabang¶
Bagaimana kalau ada lebih dari dua pilihan? Pakai elif (singkatan else if):
nama = input("Siapa nama kamu? ")
umur = int(input("Umur kamu? "))
if nama == "Alice":
print("Halo Alice!")
elif umur < 12:
print("Halo, kamu masih anak-anak.")
elif umur > 2000:
print("Halo, vampir!")
elif umur > 100:
print("Halo, seseorang yang sudah hidup lama!")
else:
print("Halo, manusia normal.")
Cara baca alur ini secara visual:
flowchart TD
Start([Mulai]) --> Q1{nama == 'Alice'?}
Q1 -- True --> A1[Halo Alice!]
Q1 -- False --> Q2{umur < 12?}
Q2 -- True --> A2[Halo anak-anak]
Q2 -- False --> Q3{umur > 2000?}
Q3 -- True --> A3[Halo vampir!]
Q3 -- False --> Q4{umur > 100?}
Q4 -- True --> A4[Halo orang tua]
Q4 -- False --> A5[Halo manusia normal]
A1 --> End([Selesai])
A2 --> End
A3 --> End
A4 --> End
A5 --> End
style Start fill:#10b981,stroke:#10b981,color:#fafafa
style End fill:#6e6e6e,stroke:#6e6e6e,color:#fafafa
style Q1 fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
style Q2 fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
style Q3 fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
style Q4 fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
style A1 fill:#1a1a1a,stroke:#6366f1,color:#fafafa
style A2 fill:#1a1a1a,stroke:#6366f1,color:#fafafa
style A3 fill:#1a1a1a,stroke:#6366f1,color:#fafafa
style A4 fill:#1a1a1a,stroke:#6366f1,color:#fafafa
style A5 fill:#1a1a1a,stroke:#ec4899,color:#fafafa
Cara baca flowchart
Flowchart ini namanya decision tree (pohon keputusan). Cara membacanya: ikuti panah dari atas ke bawah.
Bentuk-bentuk yang dipakai:
- Lingkaran hijau "Mulai" = titik awal program.
- Diamond amber = pertanyaan/kondisi (
if,elif). Setiap diamond punya dua jalur keluar: True (kalau jawabannya ya) dan False (kalau jawabannya tidak). - Kotak indigo = aksi yang dijalankan saat kondisi True.
- Kotak pink = blok
else— dijalankan kalau semua kondisi sebelumnya False. - Lingkaran abu-abu "Selesai" = titik akhir.
Cara mengikuti alur:
- Mulai dari atas. Cek pertanyaan pertama: "nama == 'Alice'?"
- Kalau True, ambil panah ke kanan → cetak "Halo Alice!" → langsung ke "Selesai". Pertanyaan lain di-skip.
- Kalau False, ambil panah ke bawah → cek pertanyaan berikutnya.
- Lanjut sampai ada satu kondisi yang True, atau sampai semua kondisi False (lalu jatuh ke
else).
Kunci yang sering bikin pemula salah paham: hanya satu jalur yang benar-benar dieksekusi. Walaupun seseorang bernama "Alice" dan umurnya 5 tahun, hanya if nama == "Alice" yang jalan. Begitu ada kondisi True, sisanya tidak pernah dicek.
Cara baca alur ini:
- Cek kondisi pertama (
nama == "Alice"). KalauTrue, jalankan blok-nya, lalu keluar dari seluruh struktur if. - Kalau
False, cek kondisi kedua (umur < 12). Dan seterusnya. - Kalau semua kondisi
False, jalankan blokelse(kalau ada).
Hanya satu blok yang akan jalan
Walaupun seseorang punya nama "Alice" dan umur kurang dari 12, hanya blok pertama (nama == "Alice") yang akan jalan. Begitu ada if/elif yang True, sisanya di-skip.
Latihan Cepat¶
Tulis program penentuan grade nilai:
nilai = int(input("Masukkan nilai (0-100): "))
if nilai >= 90:
grade = "A"
elif nilai >= 80:
grade = "B"
elif nilai >= 70:
grade = "C"
elif nilai >= 60:
grade = "D"
else:
grade = "E"
print("Grade kamu: " + grade)
Coba jalankan dengan nilai berbeda-beda. Pikirkan kenapa urutan elif-nya dari atas ke bawah penting.
2.5. Loop — Mengulang Sesuatu¶
Pengulangan (loop) adalah salah satu hal komputer jauh lebih baik dari manusia. Komputer bisa mengulang sesuatu sejuta kali tanpa lelah, tanpa salah ketik, tanpa mengeluh.
Python punya dua jenis loop: while dan for.
2.6. while — Ulang Selama Kondisi True¶
Bentuk dasar:
Cara baca: "selama kondisi True, ulang blok ini terus".
Alur visualnya:
flowchart TD
Start([Mulai]) --> Cek{Kondisi?}
Cek -- True --> Blok[Jalankan blok kode]
Blok --> Cek
Cek -- False --> End([Keluar loop])
style Start fill:#10b981,stroke:#10b981,color:#fafafa
style End fill:#6e6e6e,stroke:#6e6e6e,color:#fafafa
style Cek fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
style Blok fill:#1a1a1a,stroke:#6366f1,color:#fafafa
Cara baca flowchart
Flowchart ini menggambarkan siklus loop while — itulah kenapa ada panah yang kembali ke atas.
Tahap demi tahap:
- Mulai (lingkaran hijau) — program tiba di baris
while. - Cek kondisi (diamond amber) — Python evaluasi kondisi
while. - Kalau True → jalankan blok kode di dalam loop → kembali ke cek (panah balik ke atas).
- Kalau False → keluar loop, lanjut ke kode setelah
while.
Pola "kembali ke atas" inilah yang membedakan loop dari if. Statement if cuma ditest sekali; while ditest berulang-ulang sampai kondisinya jadi False.
Kenapa infinite loop berbahaya — sekarang seharusnya jelas dari diagram: kalau di dalam blok kode kamu tidak mengubah kondisi, panah balik akan terus bawa kamu ke kondisi yang sama yang selalu True. Loop tidak akan pernah keluar. Pastikan ada kode yang akan akhirnya membuat kondisi False.
Contoh:
hitungan = 1
while hitungan <= 5:
print("Hitungan: " + str(hitungan))
hitungan = hitungan + 1
print("Selesai!")
Output:
Cara baca step by step:
hitungan = 1— siapkan variable- Cek kondisi:
1 <= 5? Ya, masuk loop. - Cetak "Hitungan: 1"
hitunganjadi 2- Kembali ke awal, cek kondisi lagi:
2 <= 5? Ya, masuk. - ... dan seterusnya
- Saat
hitunganjadi 6, cek:6 <= 5? Tidak. Keluar loop. - Cetak "Selesai!"
Awas infinite loop
Apa yang terjadi kalau saya lupa baris hitungan = hitungan + 1?
hitungan = 1
while hitungan <= 5:
print("Hitungan: " + str(hitungan))
# hitungan tetap 1 selamanya — kondisi selalu True
Program akan mencetak "Hitungan: 1" selamanya — sampai kamu paksa stop. Ini disebut infinite loop, dan ini bug klasik.
Selalu pastikan: di dalam while, ada sesuatu yang mengubah kondisi sehingga akhirnya bisa jadi False.
Kalau kamu terjebak di infinite loop, tekan Ctrl+C di terminal untuk paksa stop.
Contoh Praktis: Verifikasi Input¶
Loop ini akan terus minta nama selama pengguna mengetik string kosong. Begitu mereka ketik sesuatu, kondisi jadi False dan loop berakhir.
break — Keluar Paksa dari Loop¶
Kadang kamu mau keluar loop sebelum kondisi False. Pakai break:
while True:
print("Ketik 'keluar' untuk berhenti")
teks = input("> ")
if teks == "keluar":
break
print("Kamu mengetik: " + teks)
print("Sampai jumpa!")
while True adalah loop yang selalu lanjut. Tanpa break, ini infinite loop. Tapi karena ada if teks == "keluar": break, program bisa keluar saat pengguna ngetik "keluar".
Pola while True + break sangat sering dipakai untuk loop yang berjalan sampai kondisi spesifik terpenuhi.
continue — Skip ke Iterasi Berikutnya¶
continue mirip break, tapi alih-alih keluar loop, dia skip ke iterasi berikutnya.
while True:
print("Siapa nama kamu?")
nama = input("> ")
if nama != "Joe":
continue
print("Halo, Joe! Apa password rahasiamu?")
password = input("> ")
if password == "swordfish":
break
print("Akses diberikan.")
Penjelasan:
- Kalau pengguna ketik nama selain "Joe",
continue→ kembali ke atas loop, tanya nama lagi - Kalau nama-nya "Joe", lanjut tanya password
- Kalau password benar,
break→ keluar loop
2.7. for — Loop dengan Jumlah Pasti¶
while cocok kalau kamu tidak tahu berapa kali harus mengulang. for cocok kalau kamu tahu — misalnya "ulangi 100 kali" atau "untuk setiap item di daftar ini".
Bentuk dasar:
Alur visualnya:
flowchart TD
Start([Mulai]) --> Init["Ambil item pertama<br/>dari range/list"]
Init --> Cek{Masih ada item?}
Cek -- Ya --> Set["variable = item<br/>saat ini"]
Set --> Blok[Jalankan blok kode]
Blok --> Next[Ambil item berikutnya]
Next --> Cek
Cek -- Tidak --> End([Keluar loop])
style Start fill:#10b981,stroke:#10b981,color:#fafafa
style End fill:#6e6e6e,stroke:#6e6e6e,color:#fafafa
style Cek fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
style Init fill:#1a1a1a,stroke:#6366f1,color:#fafafa
style Set fill:#1a1a1a,stroke:#6366f1,color:#fafafa
style Blok fill:#1a1a1a,stroke:#ec4899,color:#fafafa
style Next fill:#1a1a1a,stroke:#6366f1,color:#fafafa
Cara baca flowchart
Flowchart ini menjelaskan kenapa for lebih aman dari infinite loop dibanding while.
Tahap demi tahap:
- Mulai (lingkaran hijau) — program tiba di
for variable in sesuatu. - Init — Python siapkan iterator: ambil item pertama dari
range()atau list. - Cek (diamond amber) — apakah masih ada item tersisa? Ini bukan kondisi yang kamu tulis — Python yang manage sendiri.
- Kalau Ya → set
variable= item saat ini → jalankan blok kode → ambil item berikutnya → kembali ke cek. - Kalau Tidak → keluar loop.
Perbedaan dengan while:
- Pada
while, kamu yang bertanggung jawab mengubah kondisi. Lupa = infinite loop. - Pada
for, Python yang otomatis maju ke item berikutnya. Tidak ada cara untuk infinite loop secara tidak sengaja.
Itulah kenapa: kalau jumlah pengulangan sudah pasti (10 kali, 100 kali, atau "untuk tiap item di list"), pakai for — lebih aman dan lebih ringkas.
range() — Sahabat Loop for¶
Cara paling sering pakai for adalah dengan range():
Output:
range(5) menghasilkan urutan angka: 0, 1, 2, 3, 4. Total 5 angka, mulai dari 0, bukan 1.
Kenapa mulai dari 0?
Hampir semua bahasa pemrograman modern (Python, Java, C, JavaScript, dll) mulai hitungan dari 0. Awalnya aneh, tapi nanti kamu akan kebiasaan. Sebagian besar konsep di pemrograman lebih natural saat dimulai dari 0 — terutama saat masuk ke list di Bab 4.
range() punya tiga bentuk pemakaian:
range(5) # 0, 1, 2, 3, 4
range(2, 7) # 2, 3, 4, 5, 6 (mulai 2, sampai 7 — 7 tidak termasuk)
range(0, 10, 2) # 0, 2, 4, 6, 8 (loncat 2)
Argumen ketiga adalah step. Bisa juga negatif untuk mundur:
Output:
for vs while: Kapan Pakai yang Mana?¶
| Situasi | Pakai |
|---|---|
| "Ulangi 100 kali" | for dengan range(100) |
| "Untuk tiap item di daftar belanjaan" | for ... in daftar (Bab 4) |
| "Terus minta password sampai benar" | while |
| "Selama saldo > 0, terus tarik tunai" | while |
| "Cetak hitungan 1-10" | for dengan range(1, 11) |
Aturan praktis: kalau kamu tahu berapa kali akan diulang sebelum loop dimulai, pakai for. Kalau tergantung kondisi yang berubah selama loop, pakai while.
2.8. Project: Tebak Angka¶
Mari gabungkan semua yang sudah dipelajari menjadi project nyata.
Buat program tebak angka: komputer "memikirkan" angka random 1-20, pengguna punya 6 kesempatan tebak. Setiap tebakan, program kasih hint.
import random
print("=" * 40)
print("Selamat datang di Tebak Angka!")
print("=" * 40)
nama = input("Siapa nama kamu? ")
print("Hai " + nama + "! Aku sudah memikirkan angka antara 1 dan 20.")
angka_rahasia = random.randint(1, 20)
jumlah_kesempatan = 6
for percobaan in range(1, jumlah_kesempatan + 1):
print()
print("Percobaan ke-" + str(percobaan) + ". Tebak:")
tebakan = int(input("> "))
if tebakan < angka_rahasia:
print("Terlalu kecil.")
elif tebakan > angka_rahasia:
print("Terlalu besar.")
else:
print()
print("Selamat! Kamu menebaknya dalam " + str(percobaan) + " percobaan.")
break
if tebakan != angka_rahasia:
print()
print("Kesempatan habis. Angkanya adalah " + str(angka_rahasia) + ".")
Yang terjadi step by step:
import random— kita pakai modulrandomuntuk angka acak (akan dijelaskan lebih detail di Bab 3)random.randint(1, 20)— komputer pilih angka acak 1-20, simpan diangka_rahasiafor percobaan in range(1, 7):— loop 6 kali (percobaan 1 sampai 6)- Setiap iterasi: minta tebakan, bandingkan, kasih hint
- Kalau tebakan benar,
breakkeluar loop - Setelah loop selesai (apapun penyebabnya), cek apakah pengguna berhasil
Coba jalankan. Lalu modifikasi:
- Ubah jumlah kesempatan jadi 10
- Ubah range angka jadi 1-100
- Tambahkan: tampilkan "Hampir!" kalau selisih tebakan ≤ 3
2.9. Sedikit Tips¶
Pakai Truthiness — Singkat dan Pythonic¶
Python menganggap nilai-nilai berikut sebagai False saat dipakai sebagai kondisi:
False0dan0.0""(string kosong)None- List, dictionary, tuple kosong (akan dibahas nanti)
Semua nilai lain dianggap True.
Artinya, alih-alih menulis:
Bisa lebih singkat:
Kalau nama string kosong, kondisi False — di-skip. Kalau ada isinya, True — jalan. Lebih Pythonic.
Komentar untuk Kode Kompleks¶
Loop dan kondisi yang berlapis bisa membingungkan. Tambahkan komentar saat alur-nya tidak obvious:
# Loop sampai pengguna ketik password yang benar atau menyerah
while True:
password = input("Password: ")
if password == "swordfish":
break
if password == "":
print("Membatalkan login.")
break
2.10. Ringkasan¶
- Boolean punya dua nilai:
TruedanFalse - Operator perbandingan:
==,!=,<,>,<=,>=— menghasilkan Boolean - Operator Boolean:
and,or,not— menggabungkan kondisi if/elif/else— pengambilan keputusan, dijalankan hanya kalau kondisiTrue- Indentasi WAJIB di Python — pakai 4 spasi konsisten
while— loop selama kondisiTrue. Hati-hati infinite loop.for ... in range(n)— loop sebanyaknkali (mulai dari 0)break— keluar loop paksacontinue— skip ke iterasi berikutnyawhile True+break— pola untuk loop yang berhenti saat kondisi tertentu
Konsep paling penting: indentasi menentukan blok kode. Salah indentasi = program error atau perilaku tidak terduga.
2.11. Latihan¶
Latihan 2.1 — FizzBuzz¶
Soal klasik yang sering ditanya saat interview kerja. Tulis program yang mencetak angka 1 sampai 30, tapi:
- Kalau angka kelipatan 3, cetak "Fizz" (bukan angkanya)
- Kalau angka kelipatan 5, cetak "Buzz"
- Kalau kelipatan 3 dan 5, cetak "FizzBuzz"
- Selain itu, cetak angkanya
Hint: pakai for dan range(). Pakai modulo %.
Latihan 2.2 — Konversi Suhu Berulang¶
Program yang minta suhu Celcius dari pengguna, konversi ke Fahrenheit, lalu tanya lagi apakah mau konversi lagi. Loop sampai pengguna ketik "tidak".
Latihan 2.3 — Validasi Umur¶
Program yang minta umur. Kalau pengguna ketik angka negatif atau nol, kasih warning dan minta lagi. Loop sampai pengguna ketik angka positif.
Latihan 2.4 — Tabel Perkalian¶
Program yang minta angka, lalu cetak tabel perkalian 1 sampai 10 dari angka itu.
Output untuk input 7:
Latihan 2.5 — Total Belanja¶
Program kasir sederhana:
- Loop terus minta harga barang
- Kalau pengguna ketik 0, hentikan loop
- Tampilkan total harga semua barang
Latihan 2.6 — Tebak Angka Versi 2¶
Modifikasi project tebak angka di atas:
- Range diperluas jadi 1-100
- Beri hint "Sangat dekat!" kalau selisih ≤ 5
- Catat dan tampilkan riwayat tebakan pengguna di akhir
Latihan 2.7 — Tantangan: Pola Bintang¶
Tulis program yang minta angka N, lalu cetak segitiga bintang dengan N baris:
Kalau N = 5, cetak seperti di atas.
Hint: pakai dua loop — satu untuk baris, satu untuk bintang per baris. Atau pakai trik string "*" * jumlah.
Selanjutnya¶
Bab 3 akan masuk ke Functions — cara mengelompokkan kode jadi blok-blok yang bisa dipakai berulang. Tanpa function, program besar akan jadi mimpi buruk untuk dirawat.
Sebelum lanjut: pastikan minimal 5 latihan sudah dikerjakan. Ini bukan basa-basi — flow control adalah keterampilan paling fundamental dalam pemrograman. Semua bab setelah ini mengandalkan kemampuan kamu menulis loop dan kondisi.
Operator Perbandingan¶
| Op | Arti | Op | Arti |
|---|---|---|---|
== |
Sama | != |
Tidak sama |
< |
Kurang dari | > |
Lebih dari |
<= |
≤ | >= |
≥ |
Boolean¶
if / elif / else¶
Loop while¶
Loop for¶
for i in range(10): # 0..9
for i in range(2, 7): # 2..6
for i in range(0, 10, 2): # 0,2,4,6,8
for i in range(10, 0, -1): # 10..1
Kontrol Loop¶
← Kembali ke Bab 1 Lanjut ke Bab 3 →