Ada situasi ketika isi perulangan justru harus berjalan lebih dulu, baru kepatuhannya diperiksa: menampilkan menu lalu membaca pilihan pengguna, meminta konfirmasi sebelum melanjutkan, atau mengulang permintaan yang gagal. Pada while, kondisi diperiksa sebelum iterasi pertama, sehingga blok bisa saja tidak pernah dijalankan. do-while membalik urutannya: blok dieksekusi satu kali, baru kemudian kondisi diperiksa untuk memutuskan pengulangan. Pada chapter ini kita bedah perilaku minimal-sekali itu, membandingkannya dengan while, lalu menerapkannya pada pola paling terkenal miliknya: validasi input yang terus bertanya sampai jawabannya benar.
Dasar do-while #
Struktur do-while diawali kata kunci do, diikuti blok kode, lalu while (kondisi) yang diakhiri titik koma. Interpreter menjalankan isi blok terlebih dahulu tanpa memeriksa apa pun, kemudian mengevaluasi kondisi: true berarti kembali ke awal blok, false berarti perulangan selesai. Karena urutan itu, do-while disebut post-test loop — dan bloknya pasti dieksekusi minimal satu kali.
<?php
$hitung = 10;
do {
echo "Iterasi ke-$hitung\n";
$hitung++;
} while ($hitung <= 3);Output yang Dihasilkan:
Iterasi ke-10Contoh di atas sengaja memakai kondisi yang sudah salah sejak awal. Mari kita urutkan eksekusinya:
- Baris 6 (
echo ...): isi blok dijalankan begitu saja tanpa pemeriksaan awal —Iterasi ke-10tercetak dan$hitungmenjadi 11. - Baris 7 (
while ($hitung <= 3)): barulah kondisi diperiksa;11 <= 3bernilai false, sehingga perulangan langsung berakhir. - Versi
whiledari logika yang sama tidak akan mencetak apa pun, karena kondisinya gagal pada pemeriksaan pertama sebelum body sempat dijalankan.
Perbandingan dengan while #
Ketika kondisi sudah benar sejak awal, while dan do-while menghasilkan eksekusi yang persis sama. Contoh berikut menjalankan tugas yang sama dengan kedua struktur tersebut.
<?php
$nomor = 1;
echo "Menggunakan while:\n";
while ($nomor <= 3) {
echo " Nomor $nomor\n";
$nomor++;
}
$nomor = 1;
echo "Menggunakan do-while:\n";
do {
echo " Nomor $nomor\n";
$nomor++;
} while ($nomor <= 3);Output yang Dihasilkan:
Menggunakan while:
Nomor 1
Nomor 2
Nomor 3
Menggunakan do-while:
Nomor 1
Nomor 2
Nomor 3Kedua blok mencetak tiga baris yang identik karena kondisi $nomor <= 3 bernilai true sejak pemeriksaan pertama. Perbedaan keduanya baru terlihat ketika kondisi mulai dalam keadaan false, seperti pada contoh sebelumnya. Tabel berikut merangkum perbedaan strukturalnya:
| Aspek | while | do-while |
|---|---|---|
| Kondisi diperiksa | Sebelum body | Setelah body |
| Eksekusi minimum | 0 kali | 1 kali |
| Cocok untuk | Proses yang mungkin tidak perlu jalan sama sekali | Proses yang wajib jalan dulu baru dinilai |
Pembahasan lengkap while — termasuk pola counter, akumulator, dan membaca berkas baris demi baris — ada pada chapter while Loops
.
Pola Validasi Input #
Pola paling terkenal milik do-while adalah validasi input: minta jawaban, periksa, lalu ulangi selama jawabannya tidak valid. Kita pasti ingin meminta jawaban setidaknya sekali — makanya do-while pasnya. Contoh berikut mensimulasikan pengguna yang menjawab salah sekali lalu benar; baris penggantian input menandai tempat program nyata membaca ketikan pengguna.
<?php
// Simulasi jawaban pengguna: salah sekali, lalu benar.
// Di program CLI nyata, baris penggantian input diganti dengan:
// $input = trim(readline("Ketik ya untuk lanjut: "));
$input = "mungkin";
$percobaan = 0;
do {
$percobaan++;
echo "Percobaan #$percobaan: input \"$input\" ditolak.\n";
// Pengguna akhirnya menjawab benar pada percobaan berikutnya.
$input = "ya";
} while ($input !== "ya");
echo "Percobaan #$percobaan: input \"$input\" diterima.\n";Output yang Dihasilkan:
Percobaan #1: input "mungkin" ditolak.
Percobaan #1: input "ya" diterima.Mari kita ikuti alurnya:
- Isi blok berjalan dulu: percobaan pertama dicatat, jawaban
"mungkin"ditolak, lalu variabel$inputdiganti"ya"— pada program nyata, di sinilahreadline()menunggu ketikan pengguna. - Kondisi
$input !== "ya"diperiksa setelahnya: karena jawaban sudah benar, kondisi bernilai false dan perulangan selesai setelah satu putaran. - Sampai di sini
$percobaanbernilai 1 — cocok dengan output yang mencatat penolakan lalu penerimaan pada percobaan pertama.
Versi interaktifnya di terminal sungguhan tampak seperti berikut.
<?php
do {
$input = trim(readline("Ketik ya untuk lanjut: "));
} while ($input !== "ya");
echo "Terima kasih!\n";Blok di atas tidak bisa diuji otomatis karena readline() menunggu ketikan manusia dari keyboard. Saat Anda menjalankannya di terminal, program akan terus menanyakan hal yang sama sampai Anda mengetik ya persis — itulah perilaku yang dijamin oleh struktur do-while: tanya dulu sekali, ulangi selama jawabannya belum benar.
Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh di atas dalam satu program utuh yang dapat Anda unduh dan jalankan langsung.
Ringkasan #
do-while mengeksekusi body terlebih dahulu baru memeriksa kondisi, sehingga bloknya dijamin berjalan minimal satu kali — properti yang tidak dimiliki while. Struktur ini pas untuk pola validasi input yang harus bertanya dulu sebelum tahu apakah perlu mengulang. Ketika perulangan Anda berbasis hitungan yang sudah diketahui jumlahnya, ada struktur yang lebih ringkas daripada pasangan counter-kondisi-increment manual: for, topik chapter berikutnya.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
contoh.php
Unduh berkas<?php
// contoh.php — rangkuman contoh Chapter do-while Loops.
// Jalankan dengan: php contoh.php
// 1. Blok do-while selalu berjalan minimal sekali
$hitung = 10;
do {
echo "Iterasi ke-$hitung\n";
$hitung++;
} while ($hitung <= 3);
// 2. Perbandingan while vs do-while saat kondisi awal benar
$nomor = 1;
echo "Menggunakan while:\n";
while ($nomor <= 3) {
echo " Nomor $nomor\n";
$nomor++;
}
$nomor = 1;
echo "Menggunakan do-while:\n";
do {
echo " Nomor $nomor\n";
$nomor++;
} while ($nomor <= 3);
// 3. Pola validasi input (disimulasikan, tanpa readline interaktif)
$input = "mungkin";
$percobaan = 0;
do {
$percobaan++;
echo "Percobaan #$percobaan: input \"$input\" ditolak.\n";
$input = "ya";
} while ($input !== "ya");
echo "Percobaan #$percobaan: input \"$input\" diterima.\n";