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.

Comments