Generator dalam JavaScript Dijelaskan

May 05 2023
Dalam JavaScript, fungsi generator adalah jenis fungsi khusus yang dapat dijeda dan dilanjutkan selama eksekusi. Ini berarti generator dapat menghasilkan banyak nilai dari waktu ke waktu, bukan hanya mengembalikan satu nilai seperti fungsi biasa.

Dalam JavaScript, fungsi generator adalah jenis fungsi khusus yang dapat dijeda dan dilanjutkan selama eksekusi. Ini berarti generator dapat menghasilkan banyak nilai dari waktu ke waktu, bukan hanya mengembalikan satu nilai seperti fungsi biasa.

Fungsi generator dideklarasikan menggunakan sintaks fungsi* (atau sintaks yang lebih lama dengan kata kunci function diikuti kata generator dalam tanda kurung). Ketika fungsi generator dipanggil, itu tidak benar-benar mulai dijalankan dengan segera. Sebagai gantinya, ia mengembalikan objek iterator yang dapat digunakan untuk mengontrol eksekusi generator.

Berikut adalah contoh fungsi generator sederhana:

function* generateSequence() {
  yield 1;
  yield 2;
  yield 3;
}

Untuk menggunakan generator, pertama-tama kita membuat objek iterator dengan memanggil fungsi generator:

const iterator = generateSequence();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

Ketika generator telah selesai menghasilkan nilai, secara otomatis mengembalikan { value: undefined, done: true }.

Generator juga dapat menerima nilai masukan dari pemanggil menggunakan kata kunci hasil. Berikut adalah contoh generator yang menerima nilai awal dan menghasilkan urutan nilai yang dua kali lipat dari nilai sebelumnya:

function* generateDoubles(start) {
  let current = start;
  while (true) {
    yield current;
    current *= 2;
  }
}

const iterator = generateDoubles(1);

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 4, done: false }
console.log(iterator.next()); // { value: 8, done: false }

Generator sering digunakan untuk mengimplementasikan iterator untuk struktur data khusus. Berikut adalah contoh generator yang mengulang kunci objek:

const myObject = { a: 1, b: 2, c: 3 };

function* generateKeys(obj) {
  for (let key in obj) {
    yield key;
  }
}

const iterator = generateKeys(myObject);
console.log(iterator.next()); // { value: "a", done: false }
console.log(iterator.next()); // { value: "b", done: false }
console.log(iterator.next()); // { value: "c", done: false }
console.log(iterator.next()); // { value: undefined, done: true }

Generator juga dapat digunakan untuk mengimplementasikan evaluasi malas, di mana nilai hanya dihitung saat benar-benar dibutuhkan. Berikut adalah contoh generator yang menghasilkan bilangan prima sesuai permintaan:

function* generatePrimes() {
  let current = 2;
  while (true) {
    if (isPrime(current)) {
      yield current;
    }
    current++;
  }
}

function isPrime(num) {
  for (let i = 2; i < num; i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return num !== 1;
}

const iterator = generatePrimes();
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: 7, done: false }
console.log(iterator.next()); // { value: 11, done: false }

Generator juga dapat digunakan untuk mengimplementasikan pemrograman asinkron menggunakan sintaks async/await. Berikut adalah contoh fungsi generator yang mensimulasikan operasi asinkron yang membutuhkan waktu variabel untuk menyelesaikannya:

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function* generateAsyncValues() {
  let count = 0;
  while (true) {
    await sleep(1000);
    yield count++;
  }
}

(async () => {
  const iterator = generateAsyncValues();
  console.log(await iterator.next()); // { value: 0, done: false }
  console.log(await iterator.next()); // { value: 1, done: false }
  console.log(await iterator.next()); // { value: 2, done: false }
  console.log(await iterator.next()); // { value: 3, done: false }
})();

Singkatnya, generator dalam JavaScript adalah alat yang ampuh untuk mengimplementasikan iterator, evaluasi lambat, dan pemrograman asinkron. Mereka mengizinkan fungsi untuk menghasilkan banyak nilai dari waktu ke waktu dan dapat dijeda dan dilanjutkan selama eksekusi. Dengan menggunakan generator, pengembang dapat menulis kode yang lebih efisien, fleksibel, dan mudah dibaca.

Terima kasih sudah membaca!

Saya harap artikel ini bermanfaat bagi Anda. Jika Anda memiliki pertanyaan atau saran, silakan tinggalkan komentar. Umpan balik Anda membantu saya menjadi lebih baik.

Jangan lupa berlangganan⭐️

Halaman Facebook :https://www.facebook.com/designTechWorld1

Halaman Instagram :https://www.instagram.com/techd.esign/

Saluran Youtube :https://www.youtube.com/@tech..Design/

Twitter :https://twitter.com/sumit_singh2311

Alat tangkap yang digunakan :

laptop :https://amzn.to/3yKkzaC

Jam tangan:https://amzn.to/41cialm

Anda dapat memilih React Book: https://amzn.to/3Tw29nx

Beberapa buku tambahan yang berkaitan dengan bahasa pemrograman:

https://amzn.to/3z3tW5s

https://amzn.to/40n4m6O

https://amzn.to/3Jzstse

https://amzn.to/3nbl8aE

* Penafian Penting — “Amazon dan logo Amazon adalah merek dagang dari Amazon.com, Inc. atau afiliasinya.”