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

이터러블/이터레이터 프로토콜

by 안자바먹지 2021. 3. 24.
728x90

이터러블

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

 

이터레이터

{value, done} 객체를 리턴하는 next()를 가지는 값

 

const arr = [1, 2, 3]

let iter = arr[Symbol.iterator]()

iter.next() // {value: 1, done: false}
iter.next() // {value: 2, done: false}
iter.next() // {value: 3, done: false}
iter.next() // {value: undefined, done: true}

 

이터러블/이터레이터 프로토콜

이터러블을 for ... of, 전개연산자 등과 함께 동작하도록 한 규약

 

 

const arr = [1, 2, 3, 4, 5]

for(const a of arr) console.log(a) // 1 2 3 4 5

arr[Symbol.iterator] = null

for(const a of arr) console.log(a) // Uncaught TypeError: arr is not iterable

// Map, Set 모두 결과 동일함

 

 

사용자 정의 이터러블

 

const iterable = {
  [Symbol.iterator]() {
    let i = 3
    return {
      next() {
        return i == 0 ? {done: true} : {value: i--, done: false}
      },
      [Symbol.iterator]() {
        return this
      }
    }
  }
}

let iter = iterable[Symbol.iterator]()

iter.next() // {value: 3, done: false}
iter.next() // {value: 2, done: false}
iter.next() // {value: 1, done: false}
iter.next() // {done: true}
728x90

'함수형프로그래밍 with ' 카테고리의 다른 글

제너레이터와 이터레이터  (0) 2021.03.24
고차함수  (0) 2021.03.24

댓글