JavaScript

イテレーター オブジェクト

 編集:2022.08.16 by T.A.

イテレーターはシーケンスおよび潜在的には終了時の戻り値を定義するオブジェクトです。

より具体的に言うと、イテレーターは、次の 2 つのプロパティを持つオブジェクトを返す next() メソッドを持つことによってイテレーター プロトコルを実装するオブジェクトです。

イテレーター オブジェクトが作成されると、next() を繰り返し呼び出すことによって、明示的に反復することができます。イテレーターを反復することを、イテレーターを消費すると言います。一般的に 1 回しか実行できないためです。終了値が返された後、さらに next() を呼び出しても、単に {done: true} を返し続けます。

Javascript で最も一般的なイテレーターは配列イテレーターで、配列の各値を順番に返します。

Obj=イテレーター.next()

Obj.value
反復シーケンスの次の値。
Obj.done
シーケンスの最後の値が既に消費されている場合に true となります。

done(=false)と並んで value が存在する場合、それがイテレーターの戻り値となります。

ここでは、それを行うことができる例を示します。start (包括) から end (排他) までの一連の整数を定義する単純な範囲のイテレーターの作成を可能にします。最終的な戻り値は、作成したシーケンスのサイズあり、変数 iterationCount で追跡されます。

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); // [5 numbers returned, that took interval in between: 0 to 10]
S='A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A'; //="A𝑨B𝑩C𝑪"
I=S[Symbol.iterator](); //=[object]:[object String Iterator]
D=I.next().value; //="A"
D=I.next().value; //="𝑨"
D=I.next().value; //="B"
D=I.next().value; //="𝑩"
D=I.next().value; //="C"
D=I.next().value; //="𝑪"
D=I.next().value; //=undefined

テスト