NACの勉強の経過を綴るところ

個人的なコードの勉強

【JS】繰り返し処理を実行する関数

JS逆引きレシピ本、128(P207)。


関数とは基本、最後に戻り値を一回だけ返すものであるが、処理の過程で何度も戻り値を戻すためは、どうすればよいのか。


何度も戻り値を戻すためには、前回のエントリーでも書いたように、配列で戻せば良い。
【JS】関数から複数の値を返す - NACの勉強の経過を綴るところ
値が発生するたびに配列にpushしておき、最後に配列を戻せば良いはず。

function range(start, end) {
    let rangeArray = [];
    for(let i = start; i < end; i++) {
        rangeArray.push( i );
    }
    
    return rangeArray;
}

console.log(range(5, 10));  // [5, 6, 7, 8, 9]


だが、今回、ジェネレーターという仕組みを知った。
全く知らないやり方である。

function* range(start, end) {
    for(let i = start; i < end; i++) {
        yield i;
    }
}

for (let num of range(5, 10)) {
    console.log(range(num));  // 5, 6, 7, 8, 9
}


サンプルスクリプトなどでこれが出てきたとして、すぐに分からないかもしれない。
特に、最初の「function*」。
functionのうしろに「*」がついている、これがジェネレーター関数の特徴。
わかる自信がない。
で、戻り値を返す際には、returnではなくて、yieldで返す。
ジェネレーター関数が戻す値をジェネレーターという。


うん、混乱してきた。
ジェネレーターってなんだ、というのは、もう少し順を追って書いたほうが良さそうなので、次のエントリーに回そう。