JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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()を組み合わせることで、値の生成を細かく制御できるのがジェネレータの大きな特徴です。

  1. JavaScript DOMとは?基本の仕組みと要素の取得方法をわかりやすく解説

    JavaScriptのDOM(Document Object Model:ドキュメントオブジェクトモデル)は、Webページ上のHTML要素を表現する仕組みです。DOMはインターフェースとして機能し、ページのコンテンツやスタイルを変更することで、Webページを自由に操作できるようにします。 DOMにアクセスするには、Webページ上で右クリックして「検証(Inspect)」を選択します。すると画面の右側または左側にパネルが表示され、現在閲覧しているページのHTML要素を確認できます。要素にマウスカーソルを合わせると、ページ上の該当部分がハイライトされるため、どの要素がページのどのセクションに対応

  2. JavaScriptのyield*式とは?ジェネレーターの委譲方法をサンプルコードで解説

    yield* 式は、別のジェネレーター関数やイテラブル(反復可能)オブジェクトを参照し、その値の生成処理を委譲するために使用される構文です。 通常の yield が単一の値を返すのに対し、yield* は指定したジェネレーターや配列などのイテラブルが持つすべての値を、あたかもその場所に直接記述したかのように順番に取り出します。これにより、複数のジェネレーターを連結したり、再帰的なデータ構造を簡潔に走査したりすることが可能になります。 yield*式の基本的な仕組み yield* の後にジェネレーターオブジェクトやイテラブルを指定すると、その要素がすべて順に生成されます。委譲先のジェネレーター