[JavaScript ES 6+]サードパーティおよびアプレット


1.発電機


サードパーティ:イテレーションとイテレーションを作成する関数、*表示
<script>
    function *gen() {
        yield 1;
        if (false) yield 2;
        yield 3;
    }

    let iter = gen();
    log(iter[Symbol.iterator]() == iter);
    log(iter.next());
    log(iter.next());
    log(iter.next());
    log(iter.next());

    for (const a of gen()) log(a);
</script>

実行結果はイテレーションでありイテレーションであるため、このように巡回することができます.
for (const a of gen());

❗文を使用してループ可能な値を作成できます。これは、任意の値をループ可能に操作したり、さまざまな値をループ可能なウィジェットを作成したりできることを意味します。


2. odds

<script>
    function *odds(l) { //홀수만 생성
        for (let i = 0; i < 1; i++) {
            if (i % 2) yield i;
        }
    }

    let iter2 = odds(10); //10까지의 홀수를 뽑는 제너레이터
    log(iter2.next());
    log(iter2.next());
    log(iter2.next());
    log(iter2.next());
    log(iter2.next());
    log(iter2.next());
    log(iter2.next());
</script>
<script>
    function *infinity(i = 0) { //이터레이터는 next를 할 때마다 생성되니까 무한히 값을 생성
        while (true) yield i++;
    }

    function *limit(l, iter) {
        for (const a of iter) {
            yield a;
            if (a == l) return;
        }
    }

    function *odds(l) { //홀수만 생성
        for (const a of limit(l, infinity(1))) {
            if (a % 2) yield a;
        }
    }

    for (const a of odds(20)) log(a);

3. for...of,展開演算子,構造配分,残余演算子

<script>
    //전개 연산자
    log(...odds(10));
    log([...odds(10), ...odds(20)]);

    //구조 분해
    const [head, ...tail] = odds(5);
    log(head);
    log(tail);

    const [a, b, ...rest] = odds(10);
    log(a);
    log(b);
    log(rest);
</script>