본문 바로가기
함수형프로그래밍 with

제너레이터와 이터레이터

by 안자바먹지 2021. 3. 24.
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

댓글