【JavaScript ECMAScript】yield*演算子の使い方
yield*演算子の使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
yield*関数は、JavaScriptにおいて、function*で定義されるジェネレーター関数内で利用され、他のイテラブルオブジェクトの反復処理を現在のジェネレーターに委譲する処理を実行する関数です。
ジェネレーター関数は、yieldキーワードを使って処理を一時停止し、値を順次生成・返却できる特殊な関数です。yield*は、このジェネレーターの特性を拡張し、別のジェネレーター関数や配列、文字列、Map、Setのようなイテラブルオブジェクトが生成する全ての値を、現在のジェネレーターがまるで直接生成しているかのように、外部に順次出力することを可能にします。
これにより、親となるジェネレーターが子となるイテラブルオブジェクトの処理を「引き継ぎ」、その全ての反復処理を完了させるまで自身の実行を中断します。具体的には、子ジェネレーターがyieldした値はそのまま親ジェネレーターから外部へyieldされ、子ジェネレーターがreturnした最終値は親ジェネレーター内のyield*式の評価結果として受け取ることができます。
この機能は、複数のジェネレーターを効率的に連結したり、複雑なイテレーションロジックをモジュール化したりする際に非常に有用です。例えば、複数のデータソースから値を順番に読み込むジェネレーターを作成する場合などに、それぞれのソースを処理する小さなジェネレーターをyield*で委譲することで、コードの可読性と保守性を高めることができます。
公式リファレンス: yield*
構文(syntax)
1function* innerGenerator() { 2 yield 1; 3 yield 2; 4} 5 6function* outerGenerator() { 7 yield 'A'; 8 yield* innerGenerator(); 9 yield 'B'; 10}
引数(parameters)
引数なし
引数はありません
戻り値(return)
any
yield* 演算子は、ジェネレータ関数から別のジェネレータ関数またはイテレータを委譲して、その all elements を順番に返します。