- Bab 3 dari 12
- 25 menit
- 1 latihan kode
- 4 soal kuis
Perulangan
Di bab ini (12 bagian)
Tujuan bab ini
- Menulis perulangan dengan
for,while, dando...while. - Memilih
for...ofuntuk array danfor...inuntuk object. - Mengendalikan loop dengan
breakdancontinue, serta memakai pola akumulator. - Mengenali dan menghindari infinite loop.
Kenapa perlu perulangan?
Bayangkan kamu disuruh menampilkan angka 1 sampai 100. Menulis console.log seratus kali jelas melelahkan. Perulangan (loop) menyuruh komputer mengulang satu blok kode selama kondisi tertentu terpenuhi. Komputer tidak bosan, kamu yang hemat tenaga.
Setiap loop punya tiga bagian penting: titik mulai, kondisi berhenti, dan langkah perubahan. Kalau salah satunya keliru, loop bisa berhenti terlalu cepat atau malah tidak pernah berhenti.
for: kalau jumlah ulangan sudah jelas
Baca langkah demi langkah:
let i = 1dijalankan sekali di awal.- Kondisi
i <= 5dicek. Kalau true, blok dijalankan; kalau false, loop selesai. - Setelah blok selesai,
i++dijalankan, lalu kembali ke langkah 2.
Satu kali menjalankan blok disebut iterasi. Loop di atas punya 5 iterasi. Kamu juga bisa menghitung mundur (i--) atau melompat dua (i += 2).
while: kalau jumlah ulangan belum tahu
while hanya punya kondisi. Cocok saat kamu tidak tahu berapa kali harus mengulang, misalnya "ulangi sampai tabungan cukup".
Perhatikan: perubahan nilai (tabungan += 30000) harus ada di dalam blok. Kalau lupa, kondisinya tidak pernah berubah.
do...while: jalan minimal sekali
do...while menjalankan blok dulu, baru mengecek kondisi. Jadi blok pasti jalan minimal satu kali, bahkan kalau kondisinya sejak awal false.
Contoh nyata: menu aplikasi yang tampil dulu, lalu bertanya "mau ulang?".
for...of dan for...in
ES6 menambahkan for...of untuk mengambil nilai dari iterable seperti array dan string. Kamu tidak perlu mengurus indeks.
for...in mengambil nama key (property) dari sebuah object.
| Loop | Mengambil | Pakai untuk |
|---|---|---|
for...of | nilai | array, string, iterable lain |
for...in | key | object |
Jangan pakai for...in untuk array: hasilnya indeks berupa string ("0", "1", ...) dan bisa ikut membaca property tambahan. Untuk array, for...of atau for biasa lebih aman.
break dan continue
breakmenghentikan loop sepenuhnya.continuemelewati sisa blok dan lanjut ke iterasi berikutnya.
Analogi: continue itu skip satu lagu di playlist, break itu mematikan musiknya.
Pola akumulator
Pola paling sering dipakai dalam loop: siapkan satu variabel penampung sebelum loop, lalu perbarui di setiap iterasi.
Penampungnya bisa angka (total, hitungan), string (menyusun teks), atau array (mengumpulkan item yang lolos syarat).
Contoh: FizzBuzz
FizzBuzz adalah soal klasik di wawancara kerja. Aturannya untuk angka 1 sampai n: kelipatan 3 jadi "Fizz", kelipatan 5 jadi "Buzz", kelipatan keduanya jadi "FizzBuzz", sisanya angka itu sendiri.
Kuncinya ada di urutan: cek % 15 paling dulu. Kalau % 3 di atas, angka 15 akan berhenti di "Fizz" dan tidak pernah jadi "FizzBuzz". Ini persis pelajaran urutan if/else dari bab sebelumnya.
Menghindari infinite loop
Infinite loop terjadi saat kondisi berhenti tidak pernah tercapai. Tab browser bisa hang dan kamu terpaksa menutupnya.
Cara mencegahnya:
- Pastikan ada perubahan nilai yang mendekatkan ke kondisi berhenti.
- Cek arah perubahan:
for (let i = 0; i < 5; i--)menghitung mundur, jadi tidak pernah mencapai 5. - Untuk
whileyang rawan, tambahkan batas pengaman, misalnya penghitung maksimal lalubreak.
Kesalahan umum
- Off-by-one.
i < 5dani <= 5berbeda satu iterasi. Untuk array, pakaii < arr.length. - Lupa mengubah variabel kondisi di
while, sehingga loop tidak pernah berhenti. - Memakai
for...inuntuk array, padahal key-nya string dan property tambahan bisa ikut terbaca. - Mendeklarasikan akumulator di dalam loop, sehingga nilainya kembali ke 0 setiap iterasi.
- Menukar
breakdancontinue: break menghentikan semuanya, continue hanya melewati satu putaran.
Rangkuman
foruntuk jumlah ulangan yang jelas,whileuntuk ulangan berdasarkan kondisi,do...whileuntuk minimal sekali jalan.for...ofmengambil nilai dari array atau string;for...inmengambil key dari object.breakmenghentikan loop,continuemelompat ke iterasi berikutnya.- Pola akumulator: penampung di luar loop, diperbarui di dalam, dipakai setelahnya.
- Infinite loop dicegah dengan memastikan kondisi berhenti benar-benar bisa tercapai.
Slide 8 sampai 8 dari deck JavaScript. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: FizzBuzz dan jumlah genap
Lengkapi dua fungsi berikut:
fizzBuzz(n)mengembalikan array berisi hasil untuk angka 1 sampai n:"FizzBuzz"untuk kelipatan 15,"Fizz"untuk kelipatan 3,"Buzz"untuk kelipatan 5, dan angka itu sendiri (bertipe number) untuk sisanya. Contoh:fizzBuzz(5)menghasilkan[1, 2, "Fizz", 4, "Buzz"].jumlahGenap(angka)menerima array angka dan mengembalikan jumlah semua angka genap dengan pola akumulator. Contoh:jumlahGenap([1, 2, 3, 4])menghasilkan6.
Cek pemahaman
1Loop mana yang pasti menjalankan bloknya minimal satu kali?
2Apa output kode berikut?
let hasil = ""; for (let i = 1; i <= 5; i++) { if (i === 2) continue; if (i === 4) break; hasil += i + " "; } console.log(hasil.trim());3for...in pada sebuah object menghasilkan nilai-nilai property-nya, bukan nama key.
4Apa output kode berikut?
let total = 0; for (const n of [1, 2, 3, 4]) { total += n; } console.log(total);