February 13, 2023

Generator funksiyalar

Generator function lar nima va ular odatiy functiondan qanday farq qiladi?

Generator functionlar bizga funksiyaning ixtiyoriy joyida to'xtatib qo'yish va uni yana davom ettirishni nazorat qilish imkoni beradi. Ular odatiy functionlar kabi e'lon qilinadi faqatgina function keywordidan keyin *(yulduzcha) qo'yish kerak.

function* myGenerator(){
  console.log("Bu mening generator funksiyadan yuborgan xabarim!")
}


Agar biz myGenerator funksiyasini chaqirsak, u odatiy function lar kabi birdaniga ishga tushmaydi, balki u bizga iterable generator object qaytaradi.

Bizning generator funksiyamiz endi iterable object ekan biz uning ichidagi kodlarini next() methodi orqali ishga tushiramiz. U esa bizga value va done dan iborat object qaytaradi.

yield keywordi orqali biz funksiyani to'xtatib qo'yishimiz va qiymat qaytarishimiz mumkin(agar qiymat bo'lmasa undefined qaytadi).

Har safar next() methodini chaqirganimizda yield gacha bo'lgan kodlar ishga tushadi va o'sha joyda to'xtab qoladi. Keyingi nextda esa to'xtagan joydan navbatdagi yieldgacha bo'lgan kodlar ishga tushadi.

next methodining optional(ya'ni ixtiyoriy) bo'lgan atributi bor va bu orqali biz functionimizga qiymat berib yuboramiz. Buni quyidagicha amalga oshirak bo'ladi

yield qiymat qaytargani va faqat ungacha bo'lgan code lar ishga tushgani uchun biz newValue ning qiymatini 2 chi next chaqirishimizda berib yuborishimiz kerak.

ko'rib turganingiz kabi birinchi nextga qiymat berib yuborganimiz bilan u qiymat newValuening qiymatiga tenglashmaydi

yieldni ham generatorga aylantirish mumkinmi? Mumkin. buning uchun uning oxiriga *(yulduzcha) qo'ysangiz kifoya. yield orqali qaytargan qiymatimiz ham iteratsiya bolib ketadi.

yield* [1,2,3,4]