JavaScript generator va iterator

for...of massiv, matn va Map bilan bir xil ishlaydi. Buning ortida iterator protokoli turadi — va uni o’z obyektlaringizga ham qo’shish mumkin.

Iterator protokoli

JavaScript

for...of aslida shu ishni bajaradi — done: true bo’lguncha next() chaqiradi.

Qo’lda iterator yozish

JavaScript

Endi obyekt for...of va spread bilan ishlaydi. Ammo yozuv uzun — generator buni ancha qisqartiradi.

Generator — birinchi tanishuv

JavaScript

Pauza qanday ishlaydi

JavaScript

Funksiya tanasi next() chaqirilmaguncha umuman ishga tushmadi. Bu — oddiy funksiyadan asosiy farq.

Generator ham iterable

JavaScript

Yuqoridagi qo’lda yozilgan iterator bilan solishtiring — bir xil natija, uch barobar qisqa kod.

Obyektga qo’shish

JavaScript

Cheksiz ketma-ketlik

Generator qiymatni talab bo’yicha beradi, shuning uchun cheksiz bo’lishi mumkin:

JavaScript

Cheklovchi yordamchi

JavaScript

Generatorlarni bir-biriga ulash mumkin — har biri qiymatni kerak bo’lganda hisoblaydi. Massiv bilan bunday qilish uchun avval butun ro’yxatni yasash kerak bo’lardi.

yield* — boshqa generatorni qo’shish

JavaScript

Generatorga qiymat berish

next(qiymat)yield natijasiga aylanadi:

JavaScript

Ikki tomonlama aloqa: generator qiymat beradi va qabul qiladi.

Amaliy foyda — katta ma’lumot

JavaScript

Birinchi usul million elementni xotirada yasadi; ikkinchisi bitta qiymat hisoblab to’xtadi.

Amaliy mashq

  1. Symbol.iterator]() ni qo’lda chaqirib, next() bilan yuring;
  2. function* bilan uch qiymat beruvchi generator yozing;
  3. for...of va spread bilan ishlatib ko’ring;
  4. obyektga *[Symbol.iterator] qo’shing;
  5. Fibonachchi generatorini yozib, birinchi 10 sonini oling;
  6. yield* bilan ikki generatorni birlashtiring.

Qisqacha xulosa

  • Iteratornext() bilan { value, done } qaytaruvchi obyekt.
  • IterableSymbol.iterator bo’lgan obyekt; for...of shuni talab qiladi.
  • Generator (function*) yield da to’xtaydi va next() da davom etadi.
  • Generator tanasi next() chaqirilmaguncha ishga tushmaydi.
  • Cheksiz ketma-ketlik yasash mumkin — qiymat talab bo’yicha hisoblanadi.
  • yield* boshqa generatorni ichiga qo’shadi.

Keyingi darsda funksional dasturlash tamoyillari.

Bu dars foydali bo'ldimi?

marta ko'rildi