for...of derinlemesine
for...of döngüsünün arka planda iterator protokolünü nasıl kullandığını öğrenirsin.
for...of nasıl çalışır
for...of döngüsü, iterable'ın [Symbol.iterator]() metodunu çağırarak bir iterator alır. Sonra her adımda next() yapar; done: true gelene kadar value değerini döngü değişkenine kopyalar. Bu yüzden dizeler, Map, Set ve kendi yazdığın iterable'lar üzerinde aynı sözdizimi çalışır.
Önemli ayrım: for...in nesne anahtarlarını, for...of ise değerleri gezer. forEach yalnızca dizi, Map ve Set gibi yerleşik koleksiyonlarda varken, for...of her iterable'da çalışır.
break ve continue
for...of içinde break ile döngüyü erken kesebilir, continue ile bir adımı atlayabilirsin. break çağrıldığında iterator sonlanır; JavaScript arka planda return() metodunu çağırıp kaynakları temizler.
Bu yüzden for...of yalnızca gezmek için değil, bir koşul sağlanınca durmak için de uygundur. forEach ise break desteklemez; erken çıkış için for...of kullanmalısın.
Uygulama Iterable sayan fonksiyon
countItems adında bir fonksiyon yaz; iterable parametresi alsın. İçinde let count = 0 ile sayaç aç. for...of ile iterable'ı gez ve her öğede count++ yap. Sonra count'u döndür. Fonksiyonu bir dizi ve bir dize ile çağırıp console.log ile sonuçları yazdır.
Örnek çözümü göster
function countItems(iterable) {
let count = 0;
for (const item of iterable) {
count++;
}
return count;
}
console.log(countItems(["elma", "armut", "kiraz"]));
console.log(countItems("merhaba"));
Kendini test et
-
Hangi veri türünde for...of çalışır ama forEach metodu yoktur?
- Dizi
- Dize
- Map
- Set
Cevabı göster
Dize — Doğru. Dizeler iterable'dır ama forEach metodu yoktur.
-
for...of döngüsünü tamamla
const text = "merhaba"; for (const ch ____ text) { console.log(ch); }Cevabı göster
const text = "merhaba"; for (const ch of text) { console.log(ch); } -
Hangisi iterable değildir?
- Dizi
- Dize
- Set
- Sayı
Cevabı göster
Sayı — Doğru. Sayılar iterable değildir; for...of ile gezilemez.