Skip to content

JavaScript Generatorlar (Generators) ​

Oddiy JavaScript funksiyalari faqat bitta qiymat qaytarishi mumkin. Generator esa bir nechta qiymatlarni ketma-ket, birin-ketin qaytarish imkoniyatiga ega.

Generatorlarning asosiy afzalligi — ular to'xtatib qo'yilishi (paused) va keyinroq yana davom ettirilishi (resumed) mumkinligidir.


1. Generator funksiyasi: function* ​

Generator yaratish uchun function kalit so'zidan keyin yulduzcha (*) qo'yiladi:

js
function* meningGeneratorim() {
  yield 1;
  yield 2;
  yield 3;
}

Generator chaqirilganda u darhol qiymat qaytarmaydi, balki Generator Obyektini qaytaradi. Bu obyekt ham iterable, ham iterator protokollariga mos keladi.


2. yield kalit so'zi ​

yield operatori funksiya bajarilishini to'xtatadi va ko'rsatilgan qiymatni tashqariga (chaqiruvchiga) qaytaradi. Funksiya holati o'sha nuqtada saqlanib qoladi.

Misol

js
function* sanash() {
  yield 1;
  yield 2;
  yield 3;
}

const g = sanash();

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

3. for...of bilan ishlatish ​

Generatorlar iterable bo'lgani uchun ularni for...of tsikli bilan osongina aylanib chiqish mumkin:

js
for (let qiymat of sanash()) {
  console.log(qiymat); // 1, 2, 3
}

4. Generator Metodlari ​

Generator obyekti quyidagi metodlarga ega:

  • next(): Funksiyani keyingi yield gacha davom ettiradi.
  • return(qiymat): Generatormi muddatidan oldin tugatadi va berilgan qiymatni qaytaradi.
  • throw(xato): Generator ichida xatolik yuzaga keltiradi.

5. Nima uchun Generatorlar kerak? ​

  1. Cheksiz ma'lumotlar oqimi: Masalan, hech qachon tugamaydigan sonlar ketma-ketligini yaratish.
  2. Xotirani tejash: Barcha ma'lumotlarni massivga yig'masdan, faqat kerak bo'lganda (on-demand) hosil qilish.
  3. Asinxronlik (Async): async/await chiqishidan oldin, murakkab asinxron operatsiyalarni boshqarishda keng ishlatilgan.

Xulosa ​

Generatorlar JavaScript-da oqimli ma'lumotlar bilan ishlash va dastur oqimini nazorat qilishning juda kuchli usulidir. Ular yordamida nafaqat oddiy qiymatlar, balki murakkab iteratsiya mantiqlarini ham osonlik bilan amalga oshirish mumkin.