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 によって解決されます。
脚註
[編集]- ^ これは、イテレーションの各ステップの結果を表現するために使用されます。