Maybaygiare.org

Blog Network

イテレータとジェネレータ

JavaScriptでは、イテレータはシーケンスを定義するオブジェクトであり、終了時に戻り値を定義する可能性があります。

具体的には、イテレータは、反復シーケンスの次の値を返すnext()truedoneと一緒に存在する場合、それはイテレータの戻り値です。

作成されたイテレータオブジェクトは、next()next(){done: true}を返し続ける必要があります。

JavaScriptで最も一般的なイテレータは配列イテレータで、関連する配列の各値を順番に返します。すべてのイテレータを配列として表現できると想像するのは簡単ですが、これは真実ではありません。 配列全体を割り当てる必要がありますが、イテレータは必要に応じてのみ使用されます。 このため、イテレータは、0Infinityの間の整数の範囲など、無制限のサイズのシーケンスを表現できます。ここではそれを行うことができる例を示します。

これは、startendstepiterationCountによって追跡されます。

function makeRangeIterator(start = 0, end = Infinity, step = 1) { let nextIndex = start; let iterationCount = 0; const rangeIterator = { next: function() { let result; if (nextIndex < end) { result = { value: nextIndex, done: false } nextIndex += step; iterationCount++; return result; } return { value: iterationCount, done: true } } }; return rangeIterator;}

イテレータを使用すると、次のようになります。

const it = makeRangeIterator(1, 10, 2);let result = it.next();while (!result.done) { console.log(result.value); // 1 3 5 7 9 result = it.next();}console.log("Iterated over sequence of size: ", result.value); // 

注:特定のオブジェクトがイテレータであるかどうかを反射的に知る これを行う必要がある場合は、Iterablesを使用します。

div

コメントを残す

メールアドレスが公開されることはありません。