Menu

While Loop JavaScript: while, do...while, break, continue

Cara kerja perulangan while dan do...while di JavaScript: kapan memakainya alih-alih for, dan cara menghindari infinite loop.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Saat kamu tidak tahu berapa kali harus mengulang

Loop for unggul saat kamu sudah tahu rentangnya sejak awal: "lakukan ini 10 kali," "telusuri setiap indeks array ini." Loop while untuk kasus sebaliknya: terus jalan sampai sesuatu berubah. Kamu tidak tahu berapa putaran yang dibutuhkan, hanya kondisi yang membuatmu berhenti.

Bentuknya minimal:

JavaScript mengevaluasi kondisi di dalam tanda kurung. Kalau truthy, bloknya dijalankan. Lalu ia mengecek kondisinya lagi, dan lagi, sampai menjadi falsy. Lupa count++, maka kondisinya tidak pernah berubah, dan selamat datang di infinite loop.

Cara memikirkannya: cek, jalankan, ulangi

Ada tiga hal yang harus benar supaya sebuah loop while masuk akal:

  1. Ada sesuatu yang menjadi dasar kondisinya.
  2. Ada cara bagi badan loop untuk mengubah sesuatu itu.
  3. Pada akhirnya, kondisinya menjadi false.

Kalau satu saja hilang, kamu dalam masalah. Bug klasiknya adalah lupa langkah 2:

let count = 0;

while (count < 5) {
    console.log(count);
    // forgot to increment count - loops forever
}

Kode itu berjalan sampai kamu mematikan prosesnya. Kerusakannya nyata kalau terjadi di server. Selalu tanyakan pada dirimu: apa di dalam badan loop yang akan membuat kondisinya false?

Contoh nyata: titik berhenti yang tidak diketahui

Di sinilah while mengalahkan for. Kamu mengambil item dari suatu tempat dan tidak tahu jumlahnya sampai semuanya habis:

shift() menghapus dan mengembalikan item pertama. Loop berjalan selama antrean masih berisi sesuatu, dan berhenti dengan sendirinya saat kosong. Kamu bisa menulis ini dengan loop for, tapi kamu akan melawan bentuk masalahnya: while terbaca persis seperti maksudnya.

do...while: jalankan dulu, tanya kemudian

do...while membalik urutannya: jalankan badannya, lalu cek kondisinya. Itu menjamin setidaknya satu putaran:

Badannya selalu berjalan sekali, bahkan kalau kondisinya false sejak awal. Bandingkan dengan while biasa, yang berarti nol putaran kalau kondisinya false.

Kasus sehari-harinya: meminta input dari pengguna, memvalidasi jawabannya, lalu meminta lagi kalau jawabannya buruk. Kamu selalu ingin bertanya setidaknya sekali, jadi do...while cocok.

Perhatikan titik koma setelah ) penutup: tidak seperti while dan for, do...while membutuhkannya.

break: keluar lebih awal

break langsung keluar dari loop terdekat. Inilah cara berhenti saat kondisi alami di header tidak benar-benar pas untuk tugasnya:

Begitu break dijalankan, tidak ada lagi yang dieksekusi di dalam loop: tidak sisa badannya, tidak juga pengecekan kondisi berikutnya. Kamu sudah keluar.

while (true) dengan break

Saat kondisi berhenti lebih mudah ditulis di dalam badan loop daripada di header, balik strukturnya: ulangi terus dan break keluar saat selesai.

Ada dua jalan keluar: berhasil, dan batas pengaman. Batas pengaman itu penting. while (true) tanpa jalur break yang pasti adalah infinite loop yang tinggal menunggu waktu.

continue: lompat ke putaran berikutnya

continue melompat ke pengecekan kondisi berikutnya, melewati sisa badan putaran saat ini:

Satu jebakan: kalau hal yang memajukan loop-mu berada setelah continue, kamu baru saja membuat infinite loop. Pada contoh di atas, n++ ada sebelum continue, jadi aman. Taruh sesudahnya, dan n akan terjebak di angka genap selamanya.

while vs for: mana yang dipakai

Patokan yang mekanis:

  • Menghitung atau menelusuri indeks pada rentang yang diketahui → for. for (let i = 0; i < arr.length; i++) menyimpan persiapan counter, kondisi, dan langkahnya dalam satu baris.
  • Menelusuri sebuah koleksi → for...of. Lebih rapi daripada mengelola indeks.
  • Mengulang sampai suatu state berubah → while. Memproses antrean, polling, membaca stream, mencoba ulang sampai berhasil.
  • Selalu dijalankan setidaknya sekali → do...while.

Secara teori semuanya bisa saling menggantikan: setiap for bisa ditulis ulang sebagai while, dan sebaliknya. Tapi memilih yang cocok dengan bentuk masalahnya membuat kode menjelaskan dirinya sendiri.

Infinite loop: satu aturannya

Setiap loop while butuh jawaban yang jelas untuk: apa yang membuat ini berhenti?

Entah kondisi di header pada akhirnya akan menjadi false, atau ada break yang pasti dijalankan. Kalau kamu tidak bisa menunjuk salah satunya, loop itu belum selesai.

// Bad: condition never changes
let ready = false;
while (!ready) {
    console.log("waiting...");
    // nothing in here flips `ready`
}

// Good: the body affects the condition
let ready = false;
let checks = 0;
while (!ready) {
    checks++;
    if (checks >= 3) ready = true;
}

Di browser, infinite loop membekukan tab. Di Node, ia membuat satu core CPU bekerja penuh sampai kamu mematikan prosesnya. Layak ditangkap sebelum sampai ke production.

Berikutnya: for...of dan for...in

while menangani kasus "sampai sesuatu berubah." Untuk menelusuri array, string, dan object satu item demi satu item, JavaScript punya dua bentuk loop lagi yang dirancang persis untuk itu, yaitu for...of dan for...in, yang dibahas berikutnya.

Pertanyaan yang sering diajukan

Apa itu while loop di JavaScript?

Loop while menjalankan badannya berulang kali selama sebuah kondisi bernilai truthy. JavaScript mengecek kondisinya lebih dulu, menjalankan bloknya, lalu mengecek lagi. Kalau kondisinya false sejak awal, badannya tidak pernah dijalankan sama sekali.

Apa bedanya while dan do...while?

while mengecek kondisi sebelum menjalankan badannya, jadi nol putaran itu mungkin. do...while menjalankan badannya sekali, lalu mengecek kondisinya, jadi ia selalu berjalan setidaknya sekali. Pakai do...while saat putaran pertama harus terjadi tanpa syarat, misalnya meminta input dari pengguna.

Bagaimana cara keluar dari while loop di JavaScript?

Pakai pernyataan break untuk langsung keluar dari loop, atau continue untuk melompat ke putaran berikutnya. break adalah cara menulis loop while (true) dengan aman: berulang terus, lalu keluar saat kondisi tertentu di dalam badannya terpenuhi.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai