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

JavaScriptのyieldキーワードの使い方とは?ジェネレーター関数の基本を解説

yieldキーワードとは

JavaScriptのyieldキーワードは、ジェネレーター関数(generator function)の実行を一時停止・再開するために使用されます。yieldの右側に記述した式の値は、ジェネレーターを呼び出した側へ返されます。

yieldの構文

基本的な構文は以下のとおりです。「exp」は評価される式で、省略可能な「val」には、ジェネレーターのnext()メソッドに渡された値が代入されます。

[val] = yield [exp];

ジェネレーター関数の定義例

以下は、選択されたプレイヤーの順位を順番に生成するジェネレーター関数の例です。functionキーワードの直前にアスタリスク(*)を付けることで、ジェネレーター関数として定義できます。

function* displayRank() {
  var selPlayers = [1, 2, 3, 4];
  for (var a = 0; a < selPlayers.length; a++) {
    yield selPlayers[a];
  }
}

ジェネレーターの使い方

ジェネレーター関数を呼び出しても、すぐに関数の中身が実行されるわけではありません。代わりにイテレーター(Generatorオブジェクト)が返され、このオブジェクトのnext()メソッドを呼び出すたびに、yieldの位置まで処理が進んで値が返されます。

var rank = displayRank();

console.log(rank.next()); // { value: 1, done: false }
console.log(rank.next()); // { value: 2, done: false }
console.log(rank.next()); // { value: 3, done: false }
console.log(rank.next()); // { value: 4, done: false }
console.log(rank.next()); // { value: undefined, done: true }

next()メソッドは、valueプロパティ(yieldによって返された値)とdoneプロパティ(ジェネレーターの処理が完了したかどうか)を持つオブジェクトを返します。すべての要素を生成し終えると、valueundefinedになり、donetrueになります。

まとめ

  • yieldはジェネレーター関数内でのみ使用できる。
  • yieldに到達すると関数の実行が一時停止し、その値が呼び出し元へ返される。
  • next()メソッドを呼ぶことで実行を再開し、次のyieldまで処理が進む。
  • 遅延評価や無限シーケンスの生成など、通常の関数では実現しにくい処理に活用できる。
  1. JavaScriptのArray.every()メソッドの使い方を実例付きで解説

    Array.every()メソッドとは?Array.every()メソッドは、配列内のすべての要素が、指定されたコールバック関数によるテスト条件を満たしているかどうかを判定するメソッドです。すべての要素がテストに合格すればtrueを返し、1つでも不合格の要素が存在すればfalseを返します。基本構文array.every(callback(element[, index[, array]])[, thisArg])element: 現在処理されている要素index: 現在処理されている要素のインデックス(省略可能)array: 呼び出し元の配列(省略可能)なお、空の配列に対してevery()を

  2. C++のconstキーワードとは?定数宣言の基本とメリットを解説

    C++におけるconstは、変数を「定数」として宣言するための型修飾子です。const付きで宣言された変数は、一度初期化するとその値を後から変更することができません。 constを使うメリット constを使用する最大の利点は、プログラム内で値が意図せず書き換えられるのを防げることです。例えば、円周率(PI)のような不変の値を扱う場合、プログラムのどの部分からもその値が変更されないようにしたいはずです。このような値はconstとして宣言しておくことで、誤った代入から守ることができます。 コンパイラの最適化との関係 const修飾された型を持つオブジェクトは、コンパイラによって読み取り専用メ