JavaScript Yinelenebilirleri
Yinelenebilir nesneler, üzerinde yinelenebilen nesnelerdir for..of
.
Teknik olarak, yinelenebilirler Symbol.iterator
yöntemi uygulamalıdır.
Bir String Üzerinde Yineleme
for..of
Bir dizenin öğelerini yinelemek için bir döngü kullanabilirsiniz :
Örnek
for (const x of "W3Schools") {
// code block to be executed
}
Dizi Üzerinde Yineleme
Bir Dizinin öğelerini yinelemek için bir for..of
döngü kullanabilirsiniz:
Örnek
for (const x of [1,2,3,4,5] {
// code block to be executed
}
JavaScript Yineleyiciler
Yineleyici protokolü , bir nesneden bir dizi değerin nasıl üretileceğini tanımlar .
Bir nesne, bir yöntemi uyguladığında yineleyici olur.next()
Yöntem next()
, iki özelliğe sahip bir nesne döndürmelidir:
- değer (sonraki değer)
- yapıldı (doğru veya yanlış)
değer | Yineleyici tarafından döndürülen değer (Doğruysa atlanabilir) |
---|---|
tamamlamak |
yineleyici tamamladıysa true , yineleyici yeni bir değer ürettiyse false |
Ev Yapımı Yinelenebilir
Bu yinelenebilir dönüşler asla bitmez: 10,20,30,40,.... Her
next()
zaman çağrılır:
Örnek
// Home Made Iterable
function myNumbers() {
let n = 0;
return {
next: function() {
n += 10;
return {value:n, done:false};
}
};
}
// Create Iterable
const n = myNumbers();
n.next(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30
Yinelenebilir bir ev ile ilgili sorun:
JavaScript for..of
deyimini desteklemiyor.
Yinelenebilir bir JavaScript, Symbol.iterator içeren bir nesnedir .
Bir Symbol.iterator
işlev döndüren bir next()
işlevdir.
Yinelenebilir bir kodla yinelenebilir: for (const x of iterable) { }
Örnek
// Create an Object
myNumbers = {};
// Make it Iterable
myNumbers[Symbol.iterator] = function() {
let n = 0;
done = false;
return {
next() {
n += 10;
if (n == 100) {done = true}
return {value:n, done:done};
}
};
}
şimdi kullanabilirsin for..of
for (const num of myNumbers) {
// Any Code Here
}
Symbol.iterator yöntemi tarafından otomatik olarak çağrılır for..of
.
Ancak bunu "manuel" olarak da yapabiliriz:
Örnek
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}