イテレーター・ジェネレーター

記事の内容

イテレーター

イテレーターとは反復処理ができるものを言い、反復子とも言います。

配列は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

記事の内容
閉じる