JavaScriptのyieldキーワードとは?ジェネレータ関数の基本と使い方を解説
JavaScriptにおけるyieldキーワードは、ジェネレータ関数(generator function)の実行を一時停止し、後から再開するために使用されます。yieldが評価されると、その式の値がジェネレータの呼び出し元へ返されます。
yieldキーワードの基本的な役割
通常の関数は、呼び出されると最後まで一気に実行されます。一方、ジェネレータ関数はyieldの位置で処理を中断し、次にnext()メソッドが呼ばれたタイミングで、中断した箇所から処理を再開します。この仕組みにより、必要なときに必要な分だけ値を順番に取り出すことができます。
yieldを使ったコード例
以下は、プレイヤーのランクを順番に返すジェネレータ関数の例です。
function* displayRank() {
var selPlayers = [1, 2, 3, 4];
for (var a = 0; a < selPlayers.length; a++) {
yield selPlayers[a];
}
}ポイントとして、ジェネレータ関数を定義するときは、functionの直後にアスタリスク(*)を付けます。また、ループ内では配列の要素を正しく参照するため、インデックス変数aを使用している点にも注目してください。
ジェネレータ関数の呼び出し方
定義したジェネレータ関数は、以下のように使用します。ここでのdisplayRank()がジェネレータ関数です。
var rank = displayRank(); // value: 1 alert(rank.next()); // value: 2 alert(rank.next()); // value: 3 alert(rank.next()); // value: 4 alert(rank.next()); // value: undefined alert(rank.next());
next()メソッドの動作
next()メソッドを呼び出すたびに、ジェネレータは次のyieldまで処理を進め、その値を含むオブジェクトを返します。返されるオブジェクトは「value」と「done」という2つのプロパティを持ちます。
- value: yieldで返された値
- done: ジェネレータの処理が完了したかどうかを示す真偽値
上記の例では、5回目のnext()呼び出しですべての要素が出力済みとなるため、valueはundefinedになります。このように、yieldとnext()を組み合わせることで、値の生成を細かく制御できるのがジェネレータの大きな特徴です。
-
JavaScript DOMとは?基本の仕組みと要素の取得方法をわかりやすく解説
JavaScriptのDOM(Document Object Model:ドキュメントオブジェクトモデル)は、Webページ上のHTML要素を表現する仕組みです。DOMはインターフェースとして機能し、ページのコンテンツやスタイルを変更することで、Webページを自由に操作できるようにします。 DOMにアクセスするには、Webページ上で右クリックして「検証(Inspect)」を選択します。すると画面の右側または左側にパネルが表示され、現在閲覧しているページのHTML要素を確認できます。要素にマウスカーソルを合わせると、ページ上の該当部分がハイライトされるため、どの要素がページのどのセクションに対応
-
JavaScriptのyield*式とは?ジェネレーターの委譲方法をサンプルコードで解説
yield* 式は、別のジェネレーター関数やイテラブル(反復可能)オブジェクトを参照し、その値の生成処理を委譲するために使用される構文です。 通常の yield が単一の値を返すのに対し、yield* は指定したジェネレーターや配列などのイテラブルが持つすべての値を、あたかもその場所に直接記述したかのように順番に取り出します。これにより、複数のジェネレーターを連結したり、再帰的なデータ構造を簡潔に走査したりすることが可能になります。 yield*式の基本的な仕組み yield* の後にジェネレーターオブジェクトやイテラブルを指定すると、その要素がすべて順に生成されます。委譲先のジェネレーター