[JavaScript] 이터러블 / 제너레이터

정예원·2021년 8월 10일
0

JavaScript

목록 보기
9/13
post-thumbnail

1. 이터러블 (iterable)

  • 반복 가능한(iterable) 객체는 배열을 일반화한 객체이다.

  • for..of 반복문 적용이 가능하다.

  • 이터레이터를 리턴하는 [Symbol.iterator]()를 가진 값

    이터레이터 : {value, done} 객체를 리턴하는 next()를 가진 값

    이터러블 / 이터레이터 프로토콜 : 이터러블을 for...of, 전개 연산자 등과 함께 동작하도록 한 규약

2. 제너레이터

  • 이터레이터이자 이터러블을 생성하는 함수
  • 제너레이터를 통해 어떠한 값이든 순회 가능하게 만들 수 있다.

예시 1

function* gen() {
    yield 1;
    if (false) yield 2;
    yield 3;
}
let iter = gen();

console.log(iter[Symbol.iterator]() == iter); // true
console.log(iter.next()); // {value: 1, done: false}
console.log(iter.next()); // {value: 3, done: false}
console.log(iter.next()); // {value: undefined, done: false}

for (const a of gen()) console.log(a);

예시2

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

let iter2 = odds(10);
console.log(iter2.next()); // {value: 1, done: false}
console.log(iter2.next()); // {value: 3, done: false}
console.log(iter2.next()); // {value: 5, done: false}
console.log(iter2.next()); // {calue: 7, done: false}
console.log(iter2.next()); // {calue: 9, done: false}
console.log(iter2.next()); // {calue: undefined, done: true}
profile
hello world!

0개의 댓글