JavaScript/yield*
yield*
は、ECMAScript におけるジェネレーター関数内で使用される演算子です。この演算子は、別のジェネレーターや反復可能オブジェクト(例: Array
、String
、Map
、Set
など)から値を委任(delegate)するために使用されます。yield*
は、反復可能オブジェクトの各値を順次 yield
し、その反復が完了するまでジェネレーターの実行を一時停止します[1]。
構文
yield* AssignmentExpression
15.5.5 Runtime Semantics: Evaluation
yield*
の評価は、以下の手順で行われます:
- 式の評価:
AssignmentExpression
を評価し、反復可能オブジェクトを取得します。 - 反復処理: 反復可能オブジェクトのイテレータを取得し、各値を順次
yield
します。 - 完了処理: 反復が完了したら、ジェネレーターの実行を再開します。
例
基本的な使用法
以下のプログラムは、yield*
の基本的な使用法を示しています。
// 基本的な使用法 function* generator1() { yield 1; yield 2; yield 3; } function* generator2() { yield* generator1(); // generator1 の値を委任 yield 4; } for (const value of generator2()) { console.log(value); // 1, 2, 3, 4 }
このプログラムでは、generator2
が generator1
の値を委任し、その後 4
を yield
します。
配列での使用
以下のプログラムは、配列に対して yield*
を使用する例を示しています。
// 配列での使用 function* generator() { yield* [1, 2, 3]; yield 4; } for (const value of generator()) { console.log(value); // 1, 2, 3, 4 }
このプログラムでは、配列 [1, 2, 3]
の各値が yield
され、その後 4
が yield されます。
文字列での使用
以下のプログラムは、文字列に対して yield*
を使用する例を示しています。
// 文字列での使用 function* generator() { yield* "Hello"; } for (const value of generator()) { console.log(value); // "H", "e", "l", "l", "o" }
このプログラムでは、文字列 "Hello"
の各文字が yield
されます。