728x90
제너레이터
이터레이터이자 이터러블을 생성하는 함수를 말한다.
function *gen() {
yield 1
yield 2
yield 3
return 100
}
let iter = gen()
console.log(iter[Symbol.iterator]() == iter) // true
iter.next() // {value: 1, done: false}
iter.next() // {value: 2, done: false}
iter.next() // {value: 3, done: false}
iter.next() // {value: 100, done: true} , 제너레이터에 return 값이 있을 경우 done이 true가 될 때 그 값을 리턴한다.
for(const a of gen()) log(a) // 1 2 3 , 단 순회할 때에는 return값 없이 순회한다.
홀수만 생성하는 제너레이터
function *odds(limit) {
for(let i = 0; i < limit; i ++){
if (i % 2) yield i
}
}
let iter = odds(10)
iter.next() // {value: 1, done: false}
iter.next() // {value: 3, done: false}
iter.next() // {value: 5, done: false}
iter.next() // {value: 7, done: false}
iter.next() // {value: 9, done: false}
iter.next() // {value: undefined, done: true}
무한대로 값을 생성하는 제너레이터
function *infinity(i = 0) {
while(true) yield i++
}
let iter = infinity()
iter.next() // {value: 0, done: false}
iter.next() // {value: 1, done: false}
iter.next() // {value: 2, done: false}
728x90
'함수형프로그래밍 with ' 카테고리의 다른 글
이터러블/이터레이터 프로토콜 (0) | 2021.03.24 |
---|---|
고차함수 (0) | 2021.03.24 |
댓글