dasarloopPemula3 mnt baca

Loop while dan do-while

Pengulangan tak pasti: while cek dulu baru jalan, do-while jalan dulu baru cek.

Analogi: Menimba Air

for seperti menimba air dengan ember berukuran pasti: kamu tahu butuh 5 ember. while seperti menimba sampai bak penuh: kamu tidak tahu butuh berapa ember, yang penting berhenti saat kondisi terpenuhi. do-while mirip, tapi ia menimba minimal sekali dulu, baru mengecek apakah bak sudah penuh.

Kenapa while Ada Kalau Sudah Ada for?

for unggul saat jumlah pengulangan diketahui. Tapi banyak kasus jumlahnya tidak bisa ditebak: membaca baris file sampai habis, mencoba koneksi sampai berhasil, meminta input sampai user mengisi dengan benar. Di sinilah while bersinar: ia hanya peduli pada kondisi, bukan hitungan.

php
<?php
// Contoh 1: while, ulangi selama kondisi true
$saldo = 100000;
$biayaTarik = 20000;

while ($saldo >= $biayaTarik) {
    $saldo -= $biayaTarik;
    echo "Tarik Rp20.000, sisa saldo: Rp$saldo <br>";
}
// Berhenti sendiri saat saldo < 20000. Jumlah putaran tidak ditulis di awal.

Perhatikan tidak ada angka "5 kali" di mana pun. Loop berhenti karena data berubah ($saldo berkurang tiap putaran) sampai kondisi false. Inilah pola pikir while: kondisi yang dievaluasi ulang setiap putaran.

php
<?php
// Contoh 2: do-while, minimal jalan sekali
// Studi kasus: lempar dadu sampai dapat angka 6
do {
    $dadu = rand(1, 6);
    echo "Dadu: $dadu <br>";
} while ($dadu !== 6);
echo "Dapat 6! Berhenti.";

echo "<hr>";

// Perbedaan krusial while vs do-while:
$stok = 0;
while ($stok > 0) {
    echo "while jalan";   // TIDAK tampil: kondisi dicek dulu, langsung false
}
do {
    echo "do-while jalan";   // TAMPIL sekali: aksi dulu, baru cek kondisi
} while ($stok > 0);

Satu-satunya perbedaan do-while dan while: kapan kondisi dicek. while cek dulu (bisa nol kali jalan), do-while aksi dulu (minimal sekali). Pilih do-while saat aksi pertama wajib terjadi, misalnya menampilkan menu sebelum tahu pilihan user.

Kesalahan Umum Pemula

Salah: lupa mengubah variabel kondisi (infinite loop).

php
<?php
$saldo = 100000;
while ($saldo > 0) {
    echo "Tarik uang <br>";
    // SALAH: $saldo tidak pernah berkurang, loop selamanya!
}

Ini bug while paling klasik. Benar: pastikan ada baris di dalam loop yang membuat kondisi menuju false ($saldo -= 20000;). Setiap menulis while, langsung tanyakan: "apa yang membuat ini berhenti?"

Salah: memakai while untuk hal yang jelas jumlahnya.

php
<?php
// Bisa, tapi kaku dibanding for:
$i = 1;
while ($i <= 5) {
    echo $i;
    $i++;
}

Untuk pengulangan berbilang yang pasti (1 sampai 5, setiap isi array), for/foreach lebih ringkas dan kecil risiko infinite loop karena inisialisasi, kondisi, dan update terkumpul di satu baris. Pakai while untuk kondisi yang tidak bisa dihitung di awal.

Salah: salah menaruh titik koma di do-while.

php
<?php
do {
    $dadu = rand(1, 6);
} while ($dadu !== 6)   // SALAH: kurang titik koma di akhir!

do-while adalah satu-satunya loop yang wajib diakhiri titik koma setelah while (...). Tanpa itu, PHP error syntax.

Simulasi: Kapan while Menang Telak?

Skenario nyata di mana for tidak bisa dipakai karena jumlahnya tidak diketahui:

php
<?php
// Ambil PIN sampai benar (maksimal 3x salah)
$sisa = 3;
$benar = false;
while ($sisa > 0 && !$benar) {
    $input = readline("PIN: ");   // baca input CLI
    if ($input === "1234") {
        $benar = true;
    } else {
        $sisa--;
        echo "Salah, sisa $sisa kesempatan.\n";
    }
}
echo $benar ? "Masuk!" : "Kartu diblokir.";

// Pecah nominal jadi lembaran uang (rakus/greedy)
$sisa = 87500;
$pecahan = [50000, 20000, 10000, 5000, 2000, 1000];
foreach ($pecahan as $p) {
    while ($sisa >= $p) {
        echo "Lembar Rp" . number_format($p) . "\n";
        $sisa -= $p;
    }
}

Contoh kedua menunjukkan while di dalam foreach: untuk tiap pecahan, ambil sebanyak mungkin. Kombinasi loop bersarang seperti ini umum di studi kasus algoritma.

Catatan teknis: Pola while paling terkenal di PHP adalah membaca database: while ($row = $query->fetch_assoc()) { ... }. Loop berjalan selama masih ada baris data, berhenti otomatis saat data habis, tanpa kamu perlu tahu jumlah barisnya di awal. Kamu akan memakai pola ini terus saat belajar database.

Tantangan

Tebak angka

Simulasikan tebakan: $target = 7; $tebakan = 1;. Dengan while, naikkan $tebakan sampai sama dengan $target, hitung berapa kali percobaan. Tampilkan "Ketemu dalam X percobaan".

Kuis Bab

Uji pemahamanmu: Bab 3: Kontrol Alur

Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".

1.Apa beda utama match dibanding switch?

2.Apa yang terjadi jika lupa break di switch?

3.Loop apa yang paling cocok untuk menjelajah array asosiatif?

4.Apa output: for ($i=1; $i<=5; $i++) { if ($i==3) continue; echo $i; }

5.Apa keunikan do-while dibanding while?