Permainan tebak angka punya sifat yang tidak dimiliki daftar antrean: kita tidak tahu berapa kali pemain akan menebak. Bisa satu kali, bisa sepuluh kali — putarannya bergantung pada kapan tebakan benar, bukan pada angka yang sudah dihitung di depan. Untuk pola “ulangi selama kondisi ini masih terpenuhi”, for yang berorientasi jumlah putaran kurang pas; loop yang berorientasi kondisi lebih tepat.
Chapter ini membahas dua struktur itu: while yang memeriksa kondisi sebelum menjalankan blok, dan do-while yang menjalankan blok lebih dulu lalu memeriksa kondisinya. Kita membuktikan perbedaan keduanya lewat keluaran nyata — termasuk bukti bahwa do-while tetap berjalan satu kali meskipun kondisinya false sejak awal.
while: Ulangi Selama Kondisi Masih true #
Statement while hanya membawa satu kondisi di header-nya. Ketiga bagian yang di for digabung dalam satu baris, di while tersebar ke tiga tempat:
- nilai awal dideklarasikan sebelum loop,
- kondisi berhenti ditulis di dalam tanda kurung
while (...), - perubahan nilai dilakukan di dalam blok.
Melewati salah satunya — terutama perubahan nilai — membuat kondisi tidak pernah berubah dan loop tidak berputar ke arah berhenti.
Berkas contoh chapter ini memuat tiga eksperimen: mesin menebak angka dengan while, while yang bloknya tidak pernah jalan, dan do-while yang berjalan minimal sekali:
// tebak-angka.js
// while dengan nilai tetap, kontras blok yang dilewati, dan bukti do-while berjalan minimal sekali.
// --- 1. while: menebak angka rahasia 7 berurutan dari 1 ---
const angkaRahasia = 7;
let tebakan = 1;
let jumlahPercobaan = 1;
while (tebakan !== angkaRahasia) {
console.log("Percobaan " + jumlahPercobaan + ": tebak " + tebakan + " - belum tepat");
tebakan = tebakan + 1;
jumlahPercobaan = jumlahPercobaan + 1;
}
console.log("Percobaan " + jumlahPercobaan + ": tebak " + tebakan + " - tepat! Angka ditemukan");
// --- 2. while dengan kondisi false sejak awal: blok tidak pernah dieksekusi ---
let langkah = 0;
while (langkah > 10) {
console.log("baris ini tidak pernah tampil");
}
console.log("While kedua selesai; blok di atas dilewati seluruhnya");
// --- 3. do-while: blok tetap berjalan sekali meski kondisi false sejak awal ---
let saldoPulsa = 0;
do {
console.log("Cek saldo pulsa: Rp" + saldoPulsa);
saldoPulsa = saldoPulsa + 1; // simulasi: tidak pernah mencapai syarat berhenti
} while (saldoPulsa >= 1000000);
console.log("Do-while selesai; bloknya tetap tereksekusi satu kali");Output yang Dihasilkan:
Percobaan 1: tebak 1 - belum tepat
Percobaan 2: tebak 2 - belum tepat
Percobaan 3: tebak 3 - belum tepat
Percobaan 4: tebak 4 - belum tepat
Percobaan 5: tebak 5 - belum tepat
Percobaan 6: tebak 6 - belum tepat
Percobaan 7: tebak 7 - tepat! Angka ditemukan
While kedua selesai; blok di atas dilewati seluruhnya
Cek saldo pulsa: Rp0
Do-while selesai; bloknya tetap tereksekusi satu kaliMari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 5–7 (
const angkaRahasia,let tebakan,let jumlahPercobaan): tiga variabel disiapkan sebelum loop — angka target, nilai tebakan yang mulai dari1, dan penghitung percobaan. - Baris 9 (
while (tebakan !== angkaRahasia)): selama tebakan belum sama dengan angka rahasia, blok diulang. Ini bukti bahwa nilai uji kita tetap (angka rahasia7) tanpa input pemain: tebakan berjalan berurutan dari1sampai menemukan target. - Baris 10 (
console.log(...)): setiap putaran yang gagal mencetak satu barisbelum tepat. Ada enam baris karena1sampai6semuanya bukan7. - Baris 11–12 (
tebakan = tebakan + 1;dst.): dua variabel diperbarui di dalam blok. Tanpa baris-baris ini,tebakantetap1dan kondisi tetaptrueselamanya. - Baris 14 (
console.log(...)): ketikatebakanmencapai7, kondisi bernilaifalse, blok dilewati, dan baris keberhasilan mencetakPercobaan 7. - Baris 17–21 (while kedua): kondisi
langkah > 10langsungfalsekarenalangkahbernilai0. Blok tidak pernah dijalankan — keluaranbaris ini tidak pernah tampilmemang tidak muncul di hasil. Inilah ciriwhile: pemeriksaan dulu, eksekusi kemudian. - Baris 24–29 (do-while): blok dijalankan lebih dulu —
Cek saldo pulsa: Rp0tercetak — baru kondisisaldoPulsa >= 1000000diperiksa. Kondisi bernilaifalse, loop berhenti, tetapi satu eksekusi sudah terjadi.
Satu pengamatan dari jumlah percobaan: enam putaran gagal berarti angka 1 sampai 6 semuanya diperiksa satu per satu — itulah watak loop berbasis kondisi. Program tidak tahu di muka bahwa jawabannya 7; ia hanya tahu aturan berhentinya, yaitu tebakan === angkaRahasia. Bila angka rahasianya diganti 50, struktur yang sama tetap bekerja tanpa perubahan, hanya dengan lebih banyak baris keluaran.
Kondisi yang Cocok untuk while #
Karena kekuatannya ada pada kondisi, hal yang paling menentukan kualitas while adalah memilih kondisi yang benar-benar menggambarkan niat berhenti. Dua kelompok kondisi paling umum:
- kondisi yang menghitung:
sisaCoba > 0,langkah < target— miripfor, tetapi cocok bila nilai penghitung berubah dengan pola yang tidak seragam di dalam blok; - kondisi yang menunggu kejadian:
tebakan !== angkaRahasia,saldo < target— berhenti bergantung pada hasil pekerjaan blok, bukan pada hitungan.
Kelompok kedua inilah wilayah asli while. Sebelum menjalankan loop yang baru ditulis, periksa tiga pertanyaan di atas kepala: apa nilai awal variabel yang diperiksa, kapan kondisi menjadi false, dan baris mana yang membawa kondisi mendekati berhenti. Bila salah satu tidak terjawab, loop-nya belum siap dijalankan.
Menerjemahkan for menjadi while #
Karena keduanya sama-sama mengulang berdasarkan kondisi, setiap for bisa ditulis ulang sebagai while — yang berubah hanya tempat ketiga bagian itu berada. Hitungan mundur yang sama, dua penulisan:
// Hitungan mundur versi for
for (let i = 3; i >= 1; i--) {
console.log("for:", i);
}
// Hitungan mundur versi while: hasil sama
let j = 3;
while (j >= 1) {
console.log("while:", j);
j--;
}
console.log("Keduanya berhenti di nilai yang sama");Output yang Dihasilkan:
for: 3
for: 2
for: 1
while: 3
while: 2
while: 1
Keduanya berhenti di nilai yang samaKeluarannya identik, tetapi perhatikan perbedaan risikonya: pada for, ketiga bagian terkurung di satu baris sehingga kelupaan i-- langsung terlihat. Pada while, perubahan nilai bisa terpisah belasan baris dari kondisinya. Karena itu kesepakatan praktis yang sering dipakai: jumlah putaran yang terhitung ditulis dengan for, kondisi yang bergantung pada kejadian di dalam blok ditulis dengan while.
do-while: Jalan Dulu, Periksa Kemudian #
Kedua struktur memakai kondisi yang sama; yang berbeda hanyalah urutannya:
Pada while, kondisi diperiksa sebelum blok: bila langsung false, blok tidak pernah berjalan — persis seperti eksperimen kedua di berkas contoh. Pada do-while, blok diperintah berjalan lebih dulu oleh kata kunci do, lalu kondisi di akhir menentukan pengulangan: blok dijamin berjalan minimal satu kali. Karena itu do-while cocok untuk aksi yang memang harus dilakukan sekali sebelum bisa dinilai — misalnya menampilkan menu atau cek saldo seperti pada berkas contoh — dan jarang dipakai dibanding while maupun for.
Pemakaian khasnya adalah dialog yang hasil jawabannya baru diketahui setelah aksi pertama selesai: tampilkan pertanyaan, terima jawaban, baru nilai apakah perlu diulang. Program interaktif nyata memang mengambil jawaban dari input pengguna, tetapi pola keputusannya sama dengan simulasi nilai tetap di berkas contoh — yang berubah hanya sumber nilainya, bukan strukturnya.
Loop Tanpa Akhir: Bila Kondisi Tidak Pernah Berubah #
Kesalahan paling mahal pada while adalah lupa memperbarui nilai yang diperiksa di kondisi:
// JANGAN dijalankan: nilai hitung tidak pernah berubah di dalam blok
let hitung = 1;
while (hitung <= 3) {
console.log(hitung);
// baris hitung = hitung + 1; hilang dari blok ini
}Kondisi hitung <= 3 selamanya true, program berputar tanpa akhir, dan terminal tidak kembali ke prompt sampai kita menekan Ctrl+C. Karena itu biasakan memeriksa dua hal setiap menulis while: kondisi apa yang menghentikannya, dan baris mana yang membawa kondisi itu mendekati berhenti.
Dengan while, kita kini punya loop yang bisa berhenti kapan pun kondisinya mengizinkan. Dua chapter berikutnya melengkapi kendali itu: break dan continue untuk menghentikan atau melewati putaran dari dalam blok, lalu nested loops untuk menyusun loop di dalam loop.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
tebak-angka.js
Unduh berkas// tebak-angka.js
// while dengan nilai tetap, kontras blok yang dilewati, dan bukti do-while berjalan minimal sekali.
// --- 1. while: menebak angka rahasia 7 berurutan dari 1 ---
const angkaRahasia = 7;
let tebakan = 1;
let jumlahPercobaan = 1;
while (tebakan !== angkaRahasia) {
console.log("Percobaan " + jumlahPercobaan + ": tebak " + tebakan + " - belum tepat");
tebakan = tebakan + 1;
jumlahPercobaan = jumlahPercobaan + 1;
}
console.log("Percobaan " + jumlahPercobaan + ": tebak " + tebakan + " - tepat! Angka ditemukan");
// --- 2. while dengan kondisi false sejak awal: blok tidak pernah dieksekusi ---
let langkah = 0;
while (langkah > 10) {
console.log("baris ini tidak pernah tampil");
}
console.log("While kedua selesai; blok di atas dilewati seluruhnya");
// --- 3. do-while: blok tetap berjalan sekali meski kondisi false sejak awal ---
let saldoPulsa = 0;
do {
console.log("Cek saldo pulsa: Rp" + saldoPulsa);
saldoPulsa = saldoPulsa + 1; // simulasi: tidak pernah mencapai syarat berhenti
} while (saldoPulsa >= 1000000);
console.log("Do-while selesai; bloknya tetap tereksekusi satu kali");