함수형 프로그래밍과 JavaScript ES6+ (2) - well-formed-iterator

Lee Tae-Sung·2023년 1월 16일
0

JS

목록 보기
52/56

인프런 유인동님의 '함수형 프로그래밍과 JavaScript ES6+' 강의를 들으며 정리 및 공부한 내용입니다.

  1. Symbol 원본을 건드리지 않고 해당 속성을 숨겨놓을 수 있음

symbol을 알고 있었지만 다시한번 공부하자
https://ko.javascript.info/symbol

https://www.youtube.com/watch?v=E9uCNn6BaGQ&t=249s
2. computed property key

key로 변수를 넣는 방법

https://velog.io/@yujuck/object-key%EC%97%90-%EB%B3%80%EC%88%98%EB%A5%BC-%EB%84%A3%EC%9C%BC%EB%A0%A4%EB%A9%B4-Computed-Property-Name

  1. well-formed-iterator
    그렇다면 이제 한번 iterator를 구현해보자
const iterable = {
  [Symbol.iterator]() {
    let i = 3;
    return {
      next() {
        return i == 0 ? { done: true } : { value: i--, done: false };
      }
    }
  }
}
let iterator = iterable[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
iterator.next();
for (const a of iterator) console.log(a);

=> 구현한대로 next 함수는 잘 실행된다.
=> 하지만 우리가 원하는 iterator를 구현하지는 못했다.

=> of 및 앞에 next가 실행된 다음 이어서 2번째 부터 실행되는 등 우리가 iterator에 기대하는 것들을 충족하지 못한다.

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

=> 위의 코드와 같이 자기 자신이 여전히 iterator라는 것을 그리고 이어진 상태를 계속해서 이어주어야함.

그렇게 이러한 iterator의 기능을 모두 충족하는 것을 우리는
well-formed-iterator라고 한다.

암기

well-formed-iterator: iterator method가 iteraotr protocol이 구현된 object를 리턴하는 것

profile
긍정적인 에너지를 가진 개발자, 이태성입니다.

0개의 댓글