JavaScriptジェネレーターチュートリアル

ジェネレーターは、それ自体を一時停止し、後で再開する機能を備えた特別な種類の関数であり、その間に他のコードを実行できます。

ジェネレーターは、それ自体を一時停止し、後で再開する機能を備えた特別な種類の関数であり、その間に他のコードを実行できます。

コードは待機する必要があると判断するため、「キュー内」の他のコードを実行し、「待機中」の処理が完了したときに操作を再開する権利を保持します。

これはすべて、単一の単純なキーワードで実行されます。yield。ジェネレーターにそのキーワードが含まれている場合、実行は停止されます。

ジェネレーターには多くのyieldキーワード、したがってそれ自体を複数回停止し、それはによって識別されます*functionキーワード。これは、C、C ++、Goなどの低レベルプログラミング言語で使用されるポインター逆参照演算子と混同しないでください。

ジェネレーターは、JavaScriptでのプログラミングのまったく新しいパラダイムを可能にし、次のことを可能にします。

  • 発電機運転中の双方向通信
  • 長命ループプログラムをフリーズさせない

これは、すべてがどのように機能するかを説明するジェネレーターの例です。

function *calculator(input) {
    var doubleThat = 2 * (yield (input / 2))
    var another = yield (doubleThat)
    return (input * doubleThat * another)
}

で初期化します

const calc = calculator(10)

次に、ジェネレーターでイテレーターを開始します。

calc.next()

この最初の反復はイテレータを開始します。コードはこのオブジェクトを返します:

{
  done: false
  value: 5
}

何が起こるか:コードは関数を実行しますinput = 10ジェネレーターコンストラクターで渡されたため。に達するまで実行されますyield、の内容を返しますyieldinput / 2 = 5。したがって、値5が得られ、反復が行われていない(関数が一時停止されている)ことを示します。

2回目の反復では、値を渡します7

calc.next(7)

そして私たちが取り戻したのは:

{
  done: false
  value: 14
}

7の値として配置されましたdoubleThat。重要:あなたは次のように読むかもしれませんinput / 2引数でしたが、それは最初の反復の戻り値にすぎません。これをスキップして、新しい入力値を使用します。7, and multiply it by 2.

次に、2番目の歩留まりに到達すると、doubleThat、したがって、戻り値は14

In the next, and last, iteration, we pass in 100

calc.next(100)

そしてその見返りに

{
  done: true
  value: 14000
}

反復が完了すると(yieldキーワードはこれ以上見つかりません)、(input * doubleThat * another)これは10 * 14 * 100

私の無料ダウンロードJavaScriptビギナーズハンドブック


その他のjsチュートリアル: