제너레이터와 이터레이터
제너레이터와 이터레이터
제너레이터 : 이터레이터이자 이터러블을 생성하는 함수
function *gen() {
yield 1;
yield 2;
yield 3;
return 100; // 이터레이터가 다 돌고 done일때 나오는 값
}
let iter = gen();
// true
console.log(itet[Symbol.iterator]() == iter);
// {value: 1. done: false}
console.log(iter.next());
// {value: 2. done: false}
console.log(iter.next());
// {value: 3. done: false}
console.log(iter.next());
// {value: undefined. done: true}
console.log(iter.next());
제너레이터는 문장을 값으로 만들수 있고, 이런 값을 순회할 수 있게 만들수 있다.
제너레이터를 이용한 odds
function *adds() {
yield 1;
yield 3;
yield 5;
}
let iter = odds();
console.log(iter.next()); // 1 false
console.log(iter.next()); // 3 false
console.log(iter.next()); // 5 false
console.log(iter.next()); // undefined true
위처럼 홀수를 순회하는 이터러블을 생상하는 제너레이터
위 코드는 명시적으로 홀수를 출력하는데 좀더 자동화가 되도록 만들어보자
function *adds(l) {
for(let i=0; i<l; i++) {
if(i % 2) yield i;
}
let iter = odds(10);
console.log(iter.next()); // 1 false
console.log(iter.next()); // 3 false
console.log(iter.next()); // 5 false
console.log(iter.next()); // 7 flase
console.log(iter.next()); // 9 flase
console.log(iter.next()); // undefined true
function * infinity(i = 0) {
while(true) yield i++;
}
let iter3 = infinity();
iter3();
iter3();
iter3();
...
...
위의 코드는 무한히 값을 생성하지만! iter3의 next를 평가하기 까지만 동작하기 때문에 무한루프를 돌거나 프로그램이 멈추지 않는다. 즉 안전하게 무한수열을 만들 수 있다.
Author And Source
이 문제에 관하여(제너레이터와 이터레이터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wldns12378/제너레이터와-이터레이터저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)