記事の内容
イテレーター
イテレーターとは反復処理ができるものを言い、反復子とも言います。
配列はSymbol.iteratorと言うメソッドを
持っておりイテレーターを返す関数です。
イテレーター関数はnextメソッドを持ち、
valueとdoneの2つのプロパティがあります。
nextメソッド
value
- 反復ごとに取得した値
done
- 反復処理の真偽値
false(反復継続) true(反復終了)
例
const ary = ["リンコ", "ブドウ", "レモン"];
const iterator = ary[Symbol.iterator]();
for (let i = 1; i <= 4; i++) {
var obj = iterator.next();
console.log(i + "回目 ===============");
console.log(obj.value);
console.log(obj.done);
}
出力結果
1回目 ===============
リンコ
false
2回目 ===============
ブドウ
false
3回目 ===============
レモン
false
4回目 ===============
undefined
true
ジェネレーター
ジェネレーターは、
イテレーターの反復処理を強力にしたもので
独自のイテレータを作成することで
柔軟な反復処理アルゴリズムが記述できます。
そしてジェネレーターは、
functionの代わりに[function*]を使い
returnの代わりに[yield]を使用します。
nextメソッド
value
- 反復ごとに取得した値
done
- 反復処理の真偽値
false(反復継続) true(反復終了)
例
// ジェネレータ関数(関数処理を動的に制御できる)
function* generatorFn(num) {
num += 2;
yield num;
num *= 2;
yield num;
num -= 2;
yield num;
num /= 2;
yield num;
}
const generator = generatorFn(10);
// generator.next() を実行すると、ジェネレータ関数が順番に実行される
for (let i = 1; i <= 5; i++) {
var obj = generator.next();
console.log(i + "回目 ===============");
console.log(obj.value);
console.log(obj.done);
}
出力結果
1回目 ===============
12
false
2回目 ===============
24
false
3回目 ===============
22
false
4回目 ===============
11
false
5回目 ===============
undefined
true