コンテンツにスキップ

JavaScript/IteratorResult Interface

出典: フリー教科書『ウィキブックス(Wikibooks)』


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 オブジェクトを取得しています。各オブジェクトには valuedone プロパティがあり、反復処理の現在の状態を示しています。

手動で反復処理を行うプログラム

[編集]

以下のプログラムは、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 によって解決されます。

脚註

[編集]
  1. ^これは、イテレーションの各ステップの結果を表現するために使用されます。

外部リンク

[編集]
close