Daftar produk di gudang bisa panjang, tetapi tugas kita sering tidak memerlukan seluruhnya: berhenti begitu item yang dicari ditemukan, atau melewati item yang tidak relevan. Loop yang sudah kita kenal selalu menjalankan semua putarannya sampai kondisi berhenti; break dan continue menambah kendali dari dalam blok — satu menghentikan loop lebih awal, satu melompati sisa isi putaran yang sedang berjalan.

Chapter ini melatih keduanya dalam satu program pencarian produk: continue melewati produk yang habis, break berhenti pada produk pertama yang melewati batas anggaran. Kita juga menyinggung break berlabel untuk kasus loop bersarang, yang contoh lengkapnya menunggu di chapter Nested Loops.

break: Keluar dari Loop Lebih Awal #

Statement break menghentikan loop yang sedang berjalan pada titik baris itu. Eksekusi tidak kembali ke pemeriksaan kondisi, melainkan langsung melanjutkan ke baris pertama setelah loop. Pemakaian paling umum adalah pencarian: begitu target ditemukan, putaran-putaran berikutnya tidak ada gunanya lagi.

Dalam pekerjaan sehari-hari, break muncul pada tiga pola yang sering dipakai ulang:

  • mencari item pertama yang memenuhi syarat, lalu berhenti begitu ketemu,
  • keluar dari loop validasi begitu kesalahan pertama ditemukan,
  • membatasi jumlah hasil — ambil N item pertama, abaikan sisanya.

Tanpa break, ketiga pola itu tetap bisa ditulis — cukup bungkus sisa blok dengan if — tetapi loop akan terus berjalan sampai akhir sementara hasilnya sudah pasti tidak berubah. break memangkas pekerjaan yang tidak lagi memberi nilai tambah.

continue: Lewati Satu Putaran, Bukan Seluruh Loop #

Statement continue tidak menghentikan loop; ia melompati sisa isi blok pada putaran yang sedang berjalan. Pada for, eksekusi melompat ke bagian update (i++), lalu memeriksa kondisi seperti biasa — sehingga putaran berikutnya tetap berjalan. Pada while, continue melompat langsung ke pemeriksaan kondisi, dan perbedaan posisi inilah yang perlu diwaspadai (kita lihat di callout di bawah).

Perlu ditegaskan juga: keduanya bekerja di dalam loop, dan keduanya sering ditulis di dalam if. if-nya hanya menentukan kapan statement itu ditemui — yang bergerak tetap loop-nya. Kombinasi if untuk menyaring dan continue untuk melewati adalah pasangan yang akan terus kita lihat di kode nyata.

Berikut program yang menggabungkan keduanya:

// cari-produk.js
// continue untuk melewati item tertentu, break untuk berhenti saat target pertama ditemukan.

const hargaProduk = [12000, 0, 45000, 78000, 30000]; // 0 berarti stok habis
let totalTersedia = 0;

// --- 1. continue: lewati produk yang habis, proses sisanya ---
for (let i = 0; i < hargaProduk.length; i++) {
  if (hargaProduk[i] === 0) {
    console.log("Produk index", i, "habis - dilewati");
    continue; // lompat ke update i++, lalu cek kondisi lagi
  }
  console.log("Produk index", i, "harga Rp" + hargaProduk[i]);
  totalTersedia = totalTersedia + hargaProduk[i];
}
console.log("Total harga produk tersedia:", totalTersedia);

// --- 2. break: berhenti pada produk pertama yang melewati batas anggaran ---
const batasAnggaran = 50000;
for (let i = 0; i < hargaProduk.length; i++) {
  if (hargaProduk[i] > batasAnggaran) {
    console.log("Produk pertama di atas Rp" + batasAnggaran, "ada di index", i);
    break; // keluar dari loop; iterasi sisanya dilewati
  }
}
console.log("Pencarian selesai");

Output yang Dihasilkan:

text
Produk index 0 harga Rp12000
Produk index 1 habis - dilewati
Produk index 2 harga Rp45000
Produk index 3 harga Rp78000
Produk index 4 harga Rp30000
Total harga produk tersedia: 165000
Produk pertama di atas Rp50000 ada di index 3
Pencarian selesai

Mari kita telaah apa yang terjadi pada baris-baris kode di atas:

  1. Baris 4 (const hargaProduk = [...]): array lima harga; nilai 0 pada index 1 adalah kode untuk “stok habis”.
  2. Baris 9–12 (if (hargaProduk[i] === 0) ... continue;): ketika index 1 diperiksa, kondisinya true, pesan habis - dilewati dicetak, lalu continue melompati dua baris terakhir blok — baris pencetak harga dan penambahan total tidak dieksekusi untuk putaran ini.
  3. Baris 13–14 (console.log(...), totalTersedia = ...): hanya berjalan untuk produk yang tidak dilewati. Putaran continue tidak pernah sampai ke sini.
  4. Baris 16 (console.log("Total harga produk tersedia", totalTersedia)): 12000 + 45000 + 78000 + 30000 menghasilkan 165000 — harga produk habis tidak ikut terhitung, bukti bahwa continue benar-benar bekerja.
  5. Baris 20–25 (loop kedua dengan break): loop mencari produk pertama di atas 50000. Index 0 (12000) dan 2 (45000) tidak lolos syarat; index 3 (78000) lolos, mencetak pesan, lalu break menghentikan loop — index 4 tidak pernah diperiksa.
  6. Baris 26 (console.log("Pencarian selesai")): baris setelah loop tetap berjalan. break menghentikan loop saja, bukan program.

continue di dalam while: Waspadai Posisi Update #

Pada for, bagian update tetap dijalankan meskipun blok dilompati continue, sehingga putaran berikutnya pasti maju. Pada while tidak ada bagian update otomatis — jika baris pembaruan nilai berada setelah continue, baris itu tidak pernah dijalankan dan kondisi tidak pernah berubah:

js
// Ilustrasi pola berisiko — bandingkan posisi update dan continue
let nomor = 0;
while (nomor < 5) {
  nomor = nomor + 1;      // update HARUS sebelum continue
  if (nomor % 2 === 1) {
    continue;             // lompat ke pemeriksaan kondisi, bukan ke baris update
  }
  console.log("genap:", nomor);
}

Output yang Dihasilkan:

text
genap: 2
genap: 4

Baris nomor = nomor + 1; berada sebelum continue, sehingga setiap lompatan tetap maju. Bila posisinya dibalik, nomor berhenti di 1, kondisi 1 < 5 selamanya true, dan program berputar tanpa akhir — pola yang kita kenalkan sebagai risiko while di chapter sebelumnya.

Menangani Kasus Tidak Ditemukan #

Pencarian dengan break punya dua kemungkinan akhir: target ketemu sebelum loop habis, atau loop berjalan sampai akhir tanpa hasil. Program yang baik menangani keduanya. Trik yang umum: simpan hasil pencarian ke variabel dengan nilai penanda, lalu periksa variabel itu setelah loop:

js
const daftarNilai = [60, 75, 88, 92];
let posisiKetemu = -1;
for (let i = 0; i < daftarNilai.length; i++) {
  if (daftarNilai[i] >= 90) {
    posisiKetemu = i;
    break;
  }
}
if (posisiKetemu === -1) {
  console.log("Tidak ada nilai minimal 90");
} else {
  console.log("Nilai minimal 90 ada di index", posisiKetemu);
}

Output yang Dihasilkan:

text
Nilai minimal 90 ada di index 3

Nilai -1 dipilih sebagai penanda karena tidak mungkin menjadi index yang sah — index array dimulai dari 0. Loop berhenti di index 3 karena 92 >= 90, dan if setelah loop menerjemahkan hasilnya: -1 berarti tidak ditemukan, selain itu berarti posisi target. Bila kita menghapus nilai 92 dari daftar, loop berjalan sampai akhir tanpa break, posisiKetemu tetap -1, dan cabang pertama yang berbicara.

Pola ini juga menjawab pertanyaan yang sering muncul: bagaimana membedakan “loop selesai karena ketemu” dari “loop selesai karena habis”? break sendiri tidak memberi tanda; yang menyimpan buktinya adalah variabel yang kita siapkan — posisiKetemu di sini. Selama variabel penanda diisi hanya di jalur break, nilainya setelah loop selalu jujur menyatakan apa yang terjadi.

break Hanya Keluar dari Satu Loop #

break menghentikan loop tempat ia ditulis. Di dalam loop bersarang, satu break di loop dalam hanya menghentikan loop dalam; loop luar tetap berjalan dan akan membuka loop dalam lagi pada putaran berikutnya. Untuk keluar dari kedua loop sekaligus, JavaScript menyediakan break berlabel — ditulis dengan nama label diikuti titik dua di depan loop, lalu dipanggil break namaLabel:

js
luar: for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    break luar; // keluar dari loop yang berlabel luar
  }
}
console.log("Selesai tanpa mencetak isi loop");

Output yang Dihasilkan:

text
Selesai tanpa mencetak isi loop

Potongan ini tidak mencetak apa pun dari dalam loop — break luar di putaran pertama sudah menghentikan kedua loop. Kapan pola ini benar-benar diperlukan, dan bagaimana continue berlabel melompati satu putaran loop luar, kita buktikan dengan contoh penuh di chapter Nested Loops.

Setelah kendali putaran selesai dibahas, satu kebutuhan besar tersisa: loop di dalam loop. Chapter berikutnya menyusunnya untuk data dua dimensi — tabel perkalian dan kombinasi pasangan — sekaligus memakai break dan continue berlabel secara penuh.

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

cari-produk.js

Unduh berkas
javascript
// cari-produk.js
// continue untuk melewati item tertentu, break untuk berhenti saat target pertama ditemukan.

const hargaProduk = [12000, 0, 45000, 78000, 30000]; // 0 berarti stok habis
let totalTersedia = 0;

// --- 1. continue: lewati produk yang habis, proses sisanya ---
for (let i = 0; i < hargaProduk.length; i++) {
  if (hargaProduk[i] === 0) {
    console.log("Produk index", i, "habis - dilewati");
    continue; // lompat ke update i++, lalu cek kondisi lagi
  }
  console.log("Produk index", i, "harga Rp" + hargaProduk[i]);
  totalTersedia = totalTersedia + hargaProduk[i];
}
console.log("Total harga produk tersedia:", totalTersedia);

// --- 2. break: berhenti pada produk pertama yang melewati batas anggaran ---
const batasAnggaran = 50000;
for (let i = 0; i < hargaProduk.length; i++) {
  if (hargaProduk[i] > batasAnggaran) {
    console.log("Produk pertama di atas Rp" + batasAnggaran, "ada di index", i);
    break; // keluar dari loop; iterasi sisanya dilewati
  }
}
console.log("Pencarian selesai");