JavaScript/IteratorResult Interface
The IteratorResult Interface
は、イテレータの next()
、return()
、throw()
メソッドが返すオブジェクトの形式を定義するインターフェースです。このオブジェクトは反復処理の現在の状態を表し、値と完了状態を提供します[1]。
構文
{ value: any, done: boolean }
value
: イテレータによって生成された値。done
: イテレータが反復処理を完了したかどうかを示すブール値。
例
イテレータ結果を使用するプログラム
以下のプログラムは、イテレータの next()
メソッドが返す IteratorResult
オブジェクトを使用します。
function* createGenerator() { yield 1; yield 2; yield 3; } const iterator = createGenerator(); console.log(iterator.next()); // { value: 1, done: false } console.log(iterator.next()); // { value: 2, done: false } console.log(iterator.next()); // { value: 3, done: false } console.log(iterator.next()); // { value: undefined, done: true }
このプログラムでは、ジェネレータから取得したイテレータの next()
メソッドを呼び出し、IteratorResult
オブジェクトを取得しています。各オブジェクトには value
と done
プロパティがあり、反復処理の現在の状態を示しています。
手動で反復処理を行うプログラム
以下のプログラムは、IteratorResult
インターフェースを使用して配列を手動で反復処理します。
const array = [1, 2, 3, 4, 5]; const iterator = array[Symbol.iterator](); let result = iterator.next(); while (!result.done) { console.log(result.value); // 1, 2, 3, 4, 5 result = iterator.next(); }
このプログラムでは、配列からイテレータを取得し、next()
メソッドを呼び出して IteratorResult
オブジェクトを取得しています。done
プロパティが true
になるまで反復処理を続けます。
return メソッドを使用するプログラム
以下のプログラムは、イテレータの return()
メソッドを使用して反復処理を早期に終了し、IteratorResult
オブジェクトを取得します。
function* createGenerator() { try { yield 1; yield 2; yield 3; } finally { console.log("クリーンアップ処理が実行されました"); } } const iterator = createGenerator(); console.log(iterator.next()); // { value: 1, done: false } console.log(iterator.return(10)); // { value: 10, done: true } // "クリーンアップ処理が実行されました" が出力される console.log(iterator.next()); // { value: undefined, done: true }
このプログラムでは、イテレータの return()
メソッドを呼び出して反復処理を早期に終了し、IteratorResult
オブジェクトを取得しています。return()
メソッドが返す IteratorResult
オブジェクトの value
プロパティには引数で指定した値が設定され、done
プロパティは true
になります。
注意点
- 完了状態:
done: true
は反復処理が完了したことを示し、done: false
は反復処理が継続中であることを示します。 - 値の存在:
done: true
の場合、value
プロパティは通常undefined
ですが、return()
メソッドの場合は指定した値が設定されます。 - 省略可能な値: 反復処理が完了した場合、
value
プロパティは省略される場合があります。 - 非同期イテレータ: 非同期イテレータの場合、
IteratorResult
オブジェクトは Promise によって解決されます。
脚註
- ↑ これは、イテレーションの各ステップの結果を表現するために使用されます。