JavaScript
Özet - Generator'lar
Generator kullanarak sonsuz bir sayı dizisi üreten bir fonksiyon yazarsın.
Özet - Generator'lar
Bu grupta generator'ların temel taşlarını öğrendin. function* ile başlar, yield ile değer üretir, .next() ile adım adım ilerlersin. yield* ile başka bir generatoru delege eder; async function* ile asenkron generatorler yazarsın.
Generatorlar tembel değerlendirme sağlar: değerler yalnızca istendiğinde üretilir. Bu, sonsuz diziler ve büyük veri akışları için idealdir.
Uygulama Sonsuz sayı dizisi yaz
naturalNumbers adında bir generator yaz: 1'den başlayıp sonsuza kadar her seferinde bir sonraki doğal sayıyı üretsin. İçinde bir while (true) döngüsü, bir let n = 1 sayacı ve bir yield n olsun; her adımda n'yi artır. nums adında bir generator nesnesi oluştur ve .next().value ile ilk üç değeri console.log ile yazdır.
Örnek çözümü göster
function* naturalNumbers() {
let n = 1;
while (true) {
yield n;
n++;
}
}
const nums = naturalNumbers();
console.log(nums.next().value);
console.log(nums.next().value);
console.log(nums.next().value);
Generatorları ne zaman kullanırsın?
Generatorları ne zaman kullanırsın? Sonsuz diziler için idealdir: while (true) ile çalışan bir generator, belleği tüketmeden sonsuz değer üretebilir. Her değer yalnızca .next() çağrıldığında hesaplanır.
Ayrıca veri akışları ve asenkron iterasyon için kullanışlıdır. Büyük bir listeyi belleğe yüklemeden parça parça işlemek istediğinde generatorlar doğal bir çözümdür.
Uygulama ID üretici generator yaz
prefix adında bir generator yaz: 'user' dizesini üretsin. idMaker adında bir generator yaz: start parametresi alsın, önce yield* prefix() ile prefix'i delege etsin, sonra while (true) ile start'tan başlayan sayıları üretsin. ids adında bir generator oluştur ve .next().value ile ilk üç değeri console.log ile yazdır.
Örnek çözümü göster
function* prefix() {
yield "user";
}
function* idMaker(start) {
yield* prefix();
let id = start;
while (true) {
yield id;
id++;
}
}
const ids = idMaker(1);
console.log(ids.next().value);
console.log(ids.next().value);
console.log(ids.next().value);
Kendini test et
-
Bir generator içinde 'while (true)' kullanırsan ne olur?
- Hata fırlatır
- Bellek taşar
- Sonsuz bir değer dizisi üretilir
- Generator hiç çalışmaz
Cevabı göster
Sonsuz bir değer dizisi üretilir — Doğru! while(true) ile sonsuz bir generator yazabilirsin; değerler yalnızca .next() istedikçe üretilir.
-
Generator kavramlarını tekrar et
- function*
- generator tanımlar
- yield
- duraklatıp değer verir
- yield*
- başka generator çağırır
- async function*
- asenkron generator
Sıradaki ders: Saf fonksiyonlar