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
// 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
| Aspek | while | do...while |
|---|---|---|
| Syntax | while (kondisi) { body; } | do { body; } while (kondisi); |
| Urutan | Cek dulu, baru jalan | Jalan dulu, baru cek |
| Minimal eksekusi | Bisa 0 kali jalan | Minimal 1 kali jalan |
Perbedaan ini sangat penting untuk dipahami:
| Aspek | while | do-while |
|---|---|---|
| Urutan | Cek kondisi → jalan | Jalan → cek kondisi |
| Minimal eksekusi | 0 kali (bisa tidak pernah jalan) | 1 kali (pasti jalan minimal sekali) |
| Titik koma akhir | Tidak perlu | Wajib ada ; setelah while (kondisi); |
While vs For Loop
| While | For |
|---|---|
| Counter di luar loop | Counter di dalam syntax |
| Manual increment | Automatic increment |
| Cocok: unknown iterations | Cocok: known iterations |
| Cocok: menunggu kondisi tertentu | Cocok: iterate sepanjang array/range |
<?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): ");
}
?>
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
// 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
// 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
// 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
$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";
}
}
?>
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
$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
// ❌ 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
// ❌ $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
// ❌ 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++;
}
?>
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
- Gunakan while untuk "sampai kondisi tertentu", for untuk "sebanyak N kali".
- Pola
while (true)+breakbagus untuk loop yang berhenti di tengah (validasi input, menu). - Selalu punya jalan keluar: pastikan ada statement di dalam body yang bisa membuat condition menjadi
false. - Gunakan do-while untuk menu/konfirmasi yang harus tampil minimal sekali.
Exercise
- Buat game tebak angka (random, user menebak sampai benar)
- Buat while loop yang simulate ATM: tarik tunai sampai saldo habis atau user pilih keluar
- Apa perbedaan output dari:
<?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);
?>
- Buat program yang terus meminta password sampai user memasukkan "rahasia123"
- Gunakan while untuk menjumlahkan semua digit dari angka 12345 (hasilnya 15)
Summary
| Poin | Penjelasan |
|---|---|
| Syntax while | while (kondisi) { ... } |
| Cek kondisi | Sebelum body — bisa 0 kali jalan |
| Syntax do-while | do { ... } while (kondisi); — wajib titik koma |
| Cek kondisi do-while | Setelah body — minimal 1 kali jalan |
| Kapan pakai while | Jumlah iterasi tidak diketahui |
| Kapan pakai for | Jumlah iterasi sudah diketahui |
| Pola sentinel | Nilai penanda khusus untuk menghentikan loop |
| Common mistake | Lupa increment, titik koma setelah while |
| Pro tip | while (true) + break untuk loop yang berhenti di tengah |
Klik tombol ini setelah menyelesaikan materi
Quiz Bab 4
Uji pemahamanmu tentang Perulangan (Loops)