JavaScript/IteratorResult Interface
表示
The IteratorResult Interface
は、イテレータの next()
、return()
、throw()
メソッドが返すオブジェクトの形式を定義するインターフェースです。このオブジェクトは反復処理の現在の状態を表し、値と完了状態を提供します[1]。
構文
[編集]{value:any,done:boolean}
value
: イテレータによって生成された値。done
: イテレータが反復処理を完了したかどうかを示すブール値。
例
[編集]イテレータ結果を使用するプログラム
[編集]以下のプログラムは、イテレータの next()
メソッドが返す IteratorResult
オブジェクトを使用します。
function*createGenerator(){yield1;yield2;yield3;}constiterator=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
インターフェースを使用して配列を手動で反復処理します。
constarray=[1,2,3,4,5];constiterator=array[Symbol.iterator]();letresult=iterator.next();while(!result.done){console.log(result.value);// 1, 2, 3, 4, 5result=iterator.next();}
このプログラムでは、配列からイテレータを取得し、next()
メソッドを呼び出して IteratorResult
オブジェクトを取得しています。done
プロパティが true
になるまで反復処理を続けます。
return メソッドを使用するプログラム
[編集]以下のプログラムは、イテレータの return()
メソッドを使用して反復処理を早期に終了し、IteratorResult
オブジェクトを取得します。
function*createGenerator(){try{yield1;yield2;yield3;}finally{console.log("クリーンアップ処理が実行されました");}}constiterator=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 によって解決されます。
脚註
[編集]- ^これは、イテレーションの各ステップの結果を表現するために使用されます。