Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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 を順番に返します。

関連コンテンツ

関連プログラミング言語