BAB 4: PERULANGAN (LOOPS)

4-2: While Loop

Objectives

  • Memahami while loop
  • Memahami do-while loop
  • Kapan menggunakan while vs for
  • Menggunakan pola sentinel dan infinite loop dengan break

While Loop

While loop adalah perulangan paling sederhana di PHP: selama condition bernilai true, blok kode terus dijalankan. Berbeda dengan for loop, while tidak memiliki bagian init dan increment di dalam syntax-nya — semuanya diatur manual di luar.

php
<?php

// Basic while
$i = 1;
while ($i <= 5) {
    echo "Nomor: $i\n";
    $i++;
}

/*
Output:
Nomor: 1
Nomor: 2
Nomor: 3
Nomor: 4
Nomor: 5
*/

?>

Perhatikan perbedaan penting: variabel $i dibuat di luar, dan increment ($i++) dilakukan manual di dalam body. Jika kamu lupa baris $i++, loop tidak akan pernah berhenti!

Anatomi While vs Do-While

Aspekwhiledo...while
Syntaxwhile (kondisi) { body; }do { body; } while (kondisi);
UrutanCek dulu, baru jalanJalan dulu, baru cek
Minimal eksekusiBisa 0 kali jalanMinimal 1 kali jalan

Perbedaan ini sangat penting untuk dipahami:

Aspekwhiledo-while
UrutanCek kondisi → jalanJalan → cek kondisi
Minimal eksekusi0 kali (bisa tidak pernah jalan)1 kali (pasti jalan minimal sekali)
Titik koma akhirTidak perluWajib ada ; setelah while (kondisi);

While vs For Loop

WhileFor
Counter di luar loopCounter di dalam syntax
Manual incrementAutomatic increment
Cocok: unknown iterationsCocok: known iterations
Cocok: menunggu kondisi tertentuCocok: iterate sepanjang array/range
php
<?php

// FOR: ketika kamu tahu berapa kali iterate
for ($i = 1; $i <= 5; $i++) {
    echo "Angka: $i\n";
}

// WHILE: ketika kamu tidak tahu berapa kali iterate
$input = "yes";
while ($input === "yes") {
    echo "Looping...\n";
    $input = readline("Lagi? (yes/no): ");
}

?>
💡Tip

Aturan praktis: jika kamu bisa menjawab pertanyaan "berapa kali loop ini berjalan?" sebelum menulis kodenya, gunakan for. Jika jawabannya "sampai suatu kondisi terpenuhi", gunakan while.

Do-While Loop

php
<?php

// Do-while: MINIMAL jalan sekali!
$i = 1;
do {
    echo "Nomor: $i\n";
    $i++;
} while ($i <= 5);

/*
Output:
Nomor: 1
Nomor: 2
Nomor: 3
Nomor: 4
Nomor: 5
*/

// ⚠️ Kondisi false tapi masih jalan sekali
$i = 10;
do {
    echo "Nomor: $i\n";  // Output: Nomor: 10
    $i++;
} while ($i <= 5);

?>

Contoh nyata: do-while sempurna untuk menu atau konfirmasi yang harus ditampilkan minimal sekali sebelum dicek.

Pola Sentinel (Sentinel Value)

Pola sentinel menggunakan sebuah nilai penanda khusus (sentinel) untuk menghentikan loop. Sangat umum untuk input pengguna:

php
<?php

// Sentinel: string kosong menghentikan loop
$names = [];
$input = "start";

while ($input !== "") {
    $input = readline("Masukkan nama (Enter untuk selesai): ");
    if ($input !== "") {
        $names[] = $input;
    }
}

echo "Daftar nama:\n";
foreach ($names as $name) {
    echo "- $name\n";
}

?>

Pola ini membuat program fleksibel: pengguna bisa memasukkan data sebanyak apa pun, dan loop berhenti sendiri ketika sentinel (Enter kosong) ditemukan.

Membaca File Baris per Baris

While loop sangat cocok untuk membaca data yang jumlahnya tidak diketahui — seperti isi file:

php
<?php

// Simulasi isi file (di program nyata: fopen + fgets)
$fileContent = "baris 1\nbaris 2\nbaris 3\n";
$lines = explode("\n", trim($fileContent));

$i = 0;
while ($i < count($lines)) {
    echo "Baca: " . $lines[$i] . "\n";
    $i++;
}

/*
Output:
Baca: baris 1
Baca: baris 2
Baca: baris 3
*/

?>

Practical Example: Menu Loop

php
<?php

$menu = "
=== MENU ===
1. Lihat Data
2. Tambah Data
3. Hapus Data
4. Keluar
Pilihan: ";

$choice = "";

while ($choice !== "4") {
    echo "\n";
    $choice = readline($menu);
    
    switch ($choice) {
        case "1":
            echo "-> Menampilkan data...\n";
            break;
        case "2":
            echo "-> Menambah data...\n";
            break;
        case "3":
            echo "-> Menghapus data...\n";
            break;
        case "4":
            echo "-> Keluar dari program...\n";
            break;
        default:
            echo "-> Pilihan tidak valid!\n";
    }
}

?>
⚠️Perhatian

Perhatikan bahwa break di dalam switch hanya keluar dari switch, bukan dari while loop! Ini adalah salah satu sumber kebingungan terbesar untuk pemula. Loop baru berhenti ketika $choice === "4" di condition while.

Game Tebak Angka (Pola While + Break)

Kombinasi while (true) dengan break sering dipakai untuk loop yang berhenti di tengah-tengah body:

php
<?php

$secret = random_int(1, 10);
$attempts = 0;

while (true) {
    $guess = (int) readline("Tebak angka (1-10): ");
    $attempts++;

    if ($guess === $secret) {
        echo "Benar! Kamu menebak dalam $attempts percobaan.\n";
        break;
    } elseif ($guess < $secret) {
        echo "Terlalu kecil. Coba lagi!\n";
    } else {
        echo "Terlalu besar. Coba lagi!\n";
    }
}

?>

Common Mistakes

Lupa Increment

php
<?php

// ❌ Lupa increment = infinite loop!
$i = 1;
while ($i <= 5) {
    echo $i;
    // Tidak ada $i++;
}

// ✅ Selalu pastikan ada cara untuk mengubah kondisi
$i = 1;
while ($i <= 5) {
    echo $i;
    $i++;
}

?>

Kondisi yang Tidak Pernah Berubah

php
<?php

// ❌ $input tidak pernah berubah, loop tak berujung
$input = "ya";
while ($input === "ya") {
    echo "Looping...\n";
    // Tidak ada perubahan nilai $input
}

?>

Titik Koma Setelah While

php
<?php

// ❌ Titik koma langsung setelah while = body kosong!
$i = 1;
while ($i <= 5); {
    echo "Nomor: $i\n";
    $i++;
}

// ✅ Titik koma hanya untuk do-while
$i = 1;
while ($i <= 5) {
    echo "Nomor: $i\n";
    $i++;
}

?>
⚠️Perhatian

while ($kondisi); dengan titik koma membuat body loop menjadi kosong — loop berputar tanpa melakukan apa-apa (dan biasanya infinite). Blok { ... } setelahnya hanyalah blok kode biasa yang dijalankan sekali. Ini bug yang sangat sulit ditemukan!

Pro Tips

  1. Gunakan while untuk "sampai kondisi tertentu", for untuk "sebanyak N kali".
  2. Pola while (true) + break bagus untuk loop yang berhenti di tengah (validasi input, menu).
  3. Selalu punya jalan keluar: pastikan ada statement di dalam body yang bisa membuat condition menjadi false.
  4. Gunakan do-while untuk menu/konfirmasi yang harus tampil minimal sekali.

Exercise

  1. Buat game tebak angka (random, user menebak sampai benar)
  2. Buat while loop yang simulate ATM: tarik tunai sampai saldo habis atau user pilih keluar
  3. Apa perbedaan output dari:
php
<?php
// While
$i = 1;
while ($i > 5) {
    echo "While: $i\n";
    $i++;
}

// Do-while
$i = 1;
do {
    echo "Do-while: $i\n";
    $i++;
} while ($i > 5);
?>
  1. Buat program yang terus meminta password sampai user memasukkan "rahasia123"
  2. Gunakan while untuk menjumlahkan semua digit dari angka 12345 (hasilnya 15)

Summary

PoinPenjelasan
Syntax whilewhile (kondisi) { ... }
Cek kondisiSebelum body — bisa 0 kali jalan
Syntax do-whiledo { ... } while (kondisi); — wajib titik koma
Cek kondisi do-whileSetelah body — minimal 1 kali jalan
Kapan pakai whileJumlah iterasi tidak diketahui
Kapan pakai forJumlah iterasi sudah diketahui
Pola sentinelNilai penanda khusus untuk menghentikan loop
Common mistakeLupa increment, titik koma setelah while
Pro tipwhile (true) + break untuk loop yang berhenti di tengah

Klik tombol ini setelah menyelesaikan materi

📝

Quiz Bab 4

Uji pemahamanmu tentang Perulangan (Loops)