JS generatorlar

JavaScript funksiyasi faqat bitta qiymat qaytarishi mumkin.

JavaScript generatori birma-bir bir nechta qiymat qaytara oladi.

JavaScript generatori ma’lumotlar oqimini yield qilishi (qaytarib berishi) mumkin.

JavaScript generatorini to‘xtatib turish va davom ettirish mumkin.

ULASHISH

Generator funksiyalar

Generator funksiya function* sintaksisi yordamida aniqlanadi:

function* myGenerator() {}

Chaqirilganda, generator funksiyasi to‘g‘ridan-to‘g‘ri qiymatni emas, balki Generator obyektini qaytaradi:

{value:1, done:false}

Generator obyektlar

Generator obyekti generator funksiyasi tomonidan qaytariladi.

U iterable va iterator protokollariga mos keladi, ya’ni uni for...of sikllari yordamida iteratsiya qilish mumkin.

Misol

function* myStream() {
// return {value:1, done:false}
yield 1;

// return {value:2, done:false}
yield 2;

// return {value:3, done:true}
return 3;
}

// Create a Generator
let myGenerator = myStream();

// Iterate over the Generator
for (let value of myGenerator) { // code }
O‘zingiz sinab ko‘ring »

yield kalit so‘zi

yield kalit so‘zi bajarishni to‘xtatib turadi va chaqiruvchiga qiymatni qaytaradi (yield).

Generatorning holati saqlanib qoladi va next() chaqirilganda yield nuqtasidan boshlab davom ettirilishi mumkin.

Generatorlar o‘zlarining ichki holatini yield chaqiruvlari oralig‘ida saqlab turishadi, bu ularga to‘xtagan joydan bajarishni davom ettirishga imkon beradi.



Yuqoridagi kod misoli 1 va 2 ni qaytaradi. 3 emas!

for..of sikli done:true bo‘lganda tugaydi.

Barcha qiymatlarni olish uchun ularni yield bilan qaytaring.

Misol

function* myStream() {
// return {value:1, done:false}
yield 1;

// return {value:2, done:false}
yield 2;

// return {value:3, done:false}
yeald 3;
}

// Create a Generator
let myGenerator = myStream();

// Iterate over the Generator
for (let value of myGenerator) { // code }
O‘zingiz sinab ko‘ring »

Generator obyekt metodlari

Generator obyekti iterable va iterator protokollariga mos keladi.

Uni for...of sikllari yordamida iteratsiya qilish mumkin.

Uning metodlari ham bor:

MetodTavsif
next()Generator funksiyaning keyingi bajarilishini davom ettiradi
return()Ushbu bajarishni tugatadi va berilgan qiymatni qaytaradi
throw()Ushbu bajarilishda istisno (exception) chiqaradi

next() metodi

Generator obyektiga chaqirilganda, u generator funksiyasini bajarishni davom ettiradi.

U qiymat va generator tugagan-tugamaganini bildiruvchi boolean qiymatga ega obyektni qaytaradi:

{ value: value, done: true|false}


Maxsus iteratorlar

Generatorlar murakkab ma’lumotlar tuzilmalari yoki ketma-ketliklar uchun maxsus iteratorlarni yaratishni soddalashtiradi.

Ular so‘rov bo‘yicha qiymatlarni samarali tarzda yaratishi mumkin, bu ularni potentsial cheksiz ma’lumotlar oqimlari uchun mos qiladi.

Ular bajarishni to‘xtatib turishi va davom ettirishi mumkin, bu esa dastur oqimi ustidan nozik nazorat qilish uchun foydali bo‘lishi mumkin.

async/await’dan oldin, generatorlar asinxron operatsiyalarni yanada ketma-ket ko‘rinishda boshqarish uchun Promise’lar bilan ishlatilgan.

Generatorlar iteratsiya kontseptsiyasini to‘g‘ridan-to‘g‘ri asosiy JavaScript tiliga olib keladi va for...of siklining iteratsiya tartibini moslashtirish imkoniyatini taqdim etadi.

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!