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.
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:
| Metod | Tavsif |
|---|---|
| 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.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
