JavaScript/IteratorResult Interface

カテゴリ:Book:JavaScript#IteratorResult%20Interface%20

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

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

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

脚註

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

外部リンク

カテゴリ:Book:JavaScript#IteratorResult%20Interface%20 カテゴリ:JavaScript
カテゴリ:Book:JavaScript カテゴリ:JavaScript カテゴリ:Pages using the JsonConfig extension