こんにちは。
本日はジェネレータについてのメモです。
概要
ジェネレータについて簡単に言うと
yeildにより関数を抜けたり再開したりすることができる関数です。
ジェネレータの作成は、function*と記載するだけです。
ジェネレータはnext()メソッドでジェネレータを実行し、
結果を表すオブジェクトを返します。
サンプル
function* sampleGeneretor() { yield 'item1'; yield 'item2'; return 'item3'; } const generator = sampleGeneretor(); console.log(generator.next()); console.log(generator.next()); console.log(generator.next());
結果は以下です。
{ value: 'item1', done: false } { value: 'item2', done: false } { value: 'item3', done: true }
next()の呼び出し毎に処理が進んでいるのがわかりますね。
doneは処理が完了するまでfalseとなっていて、
処理が最後まで実行されるとtrueになっています。
ジェネレータを使って配列を処理する
ジェネレータを使用すると配列の各要素毎に処理を行う事ができます。
function* sampleGeneretor(arr) { for (let i = 0; i < arr.length; i++) { yield arr[i]; } return; } const generator = sampleGeneretor(['item1', 'item2', 'item3']); let item = generator.next(); while (!item.done) { console.log(item.value); item = generator.next(); }
結果は以下です。
item1 item2 item3
以上です。