基本知識
- ジェネレータ:イテレータを生成する機能
- イテレータ:リストや配列などの集まりに対し、一つずつアクセスするための仕組み
- yield(明け渡すなどの意味を持つ):ジェネレータ関数の実行を一時停止、ジェネレータの next() メソッドを呼び出すことが出来るキーワード(?)
- next().value:設定した関数を実行し、配列(リスト)内の次の値を呼び出すメソッド
- function*:ジェネレータ関数の定義はこのようにアスタリスクをつけるみたい
サンプルコード
単一の設定の場合
function* generatorFuntion(item) {
yield item; // 値を保持
yield item * 10; // 呼び出す時に*10して返すための設定
}
const test = generatorFuntion(10);
// generatorFuntionで取得した最初の値を返す
console.log(test.next().value);
// 10
// generatorFuntionの値に*10した値を返す
console.log(test.next().value);
// 100
// 1つしか設定していないのでundefinedが返ってくる
console.log(test.next().value);
// undefined
複数の設定で返す場合
function* loopBack() {
let index = 10;
// whileはtrueの間、処理を繰り返し続ける
while (true) {
yield index--; // next().valueの数だけ‐1した値を返す
}
}
const gen = loopBack();
console.log(gen.next().value); // 10
console.log(gen.next().value); // 9
console.log(gen.next().value); // 8
console.log(gen.next().value); // 7
console.log(gen.next().value); // 6
console.log(gen.next().value); // 5