ユーザ用ツール

サイト用ツール


ecmascript:generator

Generator

Generator(ジェネレータ)関数は反復処置プロトコルを実装した特別なGeneratorオブジェクトを返す特別な関数。

ジェネレータは、特別なキーワードyieldで指定した値がイテレータプロトコルにおけるvalueの値となる。

ジェネレータの動作

function* generator() {
  yield 1;
  yield 2;
  yield 3;
}
 
 
for (const i of generator()) {
   console.log(i)  // => 1, 2, 3
}

ジェネレータの例

フィボナッチ数列を生成するジェネレータ

function* fibonacci(count = Infinity) {
    let a = 1, b = 1
    for (let i = 0; i < count; i++) {
        yield a;
        [a, b] = [b, a + b]
    }
}
 
for (let i of fibonacci(10)) {
   console.log(i);   // => 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
}

Rangeを生成するジェネレータ

function* range(a, b) {
    for(var i = a; i <= b; i++) {
        yield i;
    }
}
 
for (let i of range(3,7)) {
   console.log(i);  // => 3, 4, 5, 6, 7
}
ecmascript/generator.txt · 最終更新: by nullpon