September 17, 2026
Memahami Generator di JavaScript.
Cara kerja function generator di JavaScript memakai function* dan yield, serta kapan generator berguna untuk iterasi malas (lazy evaluation).
Generator adalah jenis fungsi khusus yang bisa dijeda dan dilanjutkan kapan saja, berbeda dari fungsi biasa yang selalu berjalan sampai selesai begitu dipanggil.
Mendeklarasikan Generator
Generator ditandai dengan tanda bintang setelah kata kunci function, dan memakai yield untuk menghasilkan nilai satu per satu.
function* hitungSampaiTiga() {
yield 1;
yield 2;
yield 3;
}
const generator = hitungSampaiTiga();
console.log(generator.next()); // { value: 1, done: false }
console.log(generator.next()); // { value: 2, done: false }
console.log(generator.next()); // { value: 3, done: false }
console.log(generator.next()); // { value: undefined, done: true }
Setiap pemanggilan .next() menjalankan kode sampai yield berikutnya, lalu berhenti sambil “mengingat” posisinya.
Mengiterasi Generator dengan for…of
function* warnaPelangi() {
yield "Merah";
yield "Jingga";
yield "Kuning";
}
for (const warna of warnaPelangi()) {
console.log(warna);
}
Generator untuk Barisan Tak Terbatas
Karena nilainya dihasilkan satu per satu sesuai permintaan (lazy evaluation), generator cocok untuk merepresentasikan barisan yang secara teori tidak terbatas.
function* angkaGanjil() {
let n = 1;
while (true) {
yield n;
n += 2;
}
}
const ganjil = angkaGanjil();
console.log(ganjil.next().value); // 1
console.log(ganjil.next().value); // 3
console.log(ganjil.next().value); // 5
Karena generator hanya menghasilkan nilai saat diminta, kode ini tidak akan pernah menyebabkan infinite loop meski logikanya while (true).
Mengirim Nilai ke Dalam Generator
function* percakapan() {
const nama = yield "Siapa namamu?";
yield `Halo, ${nama}!`;
}
const obrolan = percakapan();
console.log(obrolan.next().value); // "Siapa namamu?"
console.log(obrolan.next("Wulan").value); // "Halo, Wulan!"
Kesimpulan
Generator memberi kontrol untuk menjeda dan melanjutkan eksekusi fungsi, menjadikannya alat yang tepat untuk barisan data besar atau tak terbatas yang tidak perlu dihitung semuanya sekaligus di awal. Meski jarang dipakai langsung dalam kode aplikasi sehari-hari, generator menjadi fondasi penting di balik beberapa pustaka JavaScript modern untuk menangani iterasi asinkron.

Hey! I’m Fanny, the software engineer tending to this digital garden. You can read more about me, or subscribe by email.