JavaScript - Iterator & generator

Code_Alpacat·2022년 6월 9일
0

JavaScript - 중급

목록 보기
3/11

1. 제너레이터와 이터레이터

1) 제너레이터

  • 이터레이터이자 이터러블을 생성하는 함수

  • function *gen() { //손쉽게 생성 가능한 이터러블
        yield 1; //몇 번의 next를 통해 값을 꺼내줄지 결정
        if (false) yield 2;
        yield 3;
        return 100; //done이 true가 되며 리턴 값을 value로 전달
    }
    let iter = gen();
    log(iter[Symbol.iterator]() == iter)
    log(iter.next());
    
    for (const a of gen()) log(a); //순회 가능 => 순회는 리턴 없이 이루어지고 done인 순간 return 반환

2) odds

function *odds(l) {
    for (let i = 0; i < l; i++) {
        if (i % 2) yield i;
    }
}

let iter2 = odds(10);
function *infinity(i = 0) {
    while (true) yield i++;
} //무한히 값을 생성하는 이터레이터 next를 할 때마다 yield를 통해 value가 무한히 생성된다.

function *limit(l, iter) {
    for (const a of iter) {
        yield a;
        if (a == l) return; //같은 값을 만나면 멈추는 제네레이터
    }
}

function *odds(l) {
    for (const a of infinity(1)) {
        if (i % 2) yield i;
        if (a == l) return;
    }
}

for (const a of odds(40)) log(a); //제너레이터를 통해 순회하는 값을 할당해줄 수 있다.

3) 구조 분해, 나머지 연산 .. 등

log(...odds(10));
log([...odds(10), ...odds(20)]);

const [head, ...tail] = odds(5);

const [a, b, ...rest] = odds(10);
profile
In the future, I'm never gonna regret, cuz I've been trying my best for every single moment.

0개의 댓글