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
<?php
$hitung = 10;

do {
    echo "Iterasi ke-$hitung\n";
    $hitung++;
} while ($hitung <= 3);

Output yang Dihasilkan:

text
Iterasi ke-10

Contoh di atas sengaja memakai kondisi yang sudah salah sejak awal. Mari kita urutkan eksekusinya:

  1. Baris 6 (echo ...): isi blok dijalankan begitu saja tanpa pemeriksaan awal — Iterasi ke-10 tercetak dan $hitung menjadi 11.
  2. Baris 7 (while ($hitung <= 3)): barulah kondisi diperiksa; 11 <= 3 bernilai false, sehingga perulangan langsung berakhir.
  3. Versi while dari 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
<?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:

text
Menggunakan while:
  Nomor 1
  Nomor 2
  Nomor 3
Menggunakan do-while:
  Nomor 1
  Nomor 2
  Nomor 3

Kedua 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:

Aspekwhiledo-while
Kondisi diperiksaSebelum bodySetelah body
Eksekusi minimum0 kali1 kali
Cocok untukProses yang mungkin tidak perlu jalan sama sekaliProses 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
<?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:

text
Percobaan #1: input "mungkin" ditolak.
Percobaan #1: input "ya" diterima.

Mari kita ikuti alurnya:

  1. Isi blok berjalan dulu: percobaan pertama dicatat, jawaban "mungkin" ditolak, lalu variabel $input diganti "ya" — pada program nyata, di sinilah readline() menunggu ketikan pengguna.
  2. Kondisi $input !== "ya" diperiksa setelahnya: karena jawaban sudah benar, kondisi bernilai false dan perulangan selesai setelah satu putaran.
  3. Sampai di sini $percobaan bernilai 1 — cocok dengan output yang mencatat penolakan lalu penerimaan pada percobaan pertama.

Versi interaktifnya di terminal sungguhan tampak seperti berikut.

php
<?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
<?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";