ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] Symbol.iterator
    카테고리 없음 2022. 12. 15. 23:31

     

    인프런 강의 정리

    함수형 프로그래밍과 Javascript ES6+

     

    이터러블/이터레이터 프로토콜
    - 이터러블: 이터레이터를 리턴하는 [Symbol.iterator]() 를 가진 값
    - 이터레이터: { value, done } 객체를 리턴하는 next() 를 가진 값
    - 이터러블/이터레이터 프로토콜: 이터러블을 for...of, 전개 연산자 등과 함께 동작하도록한 규약

     

    Collection[Symbol.iterator]

    - Array[Symbol.iterator] // values() { [native code] }
    - Set[Symbol.iterator] // values() { [native code] }
    - Map[Symbol.iterator] // entries() { [native code] }

     

    // Java vs Javscript For문과 비교

    // 이터러블은 for (const a of iterable) log(a); 로 순회참조가 가능하다.

    //java
    //string
    String[] striings = [];
    for( String str : striings ) {}
    
    //hashMap
    Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
    
    while(iterator.hasNext()) {
        Map.Entry<String, Integer> entry = iterator.next();
        System.out.println("key" + entry.getKey());
        System.out.println("value" + entry.getValue());
    }

     

    //javascript Iterator
    
    const strings = [];
    
    const collections = strngs[Symbol.iterator]();
    //const collections = new Set([]);
    //const collections = new Map([]);
    
    for (const collection of collections) {
    	log(collections); // strings, set, map value
    }
    
    //map일 경우 
    //아래의 경우도 모두 Symbol.iterator로 반환된다.
    map.keys();
    map.values();
    map.entries();

     

     

    Iterator를 반환하기위해 return에 [Symbol.iterator] 추가

      const iterable = {
        [Symbol.iterator]() {
          let i = 1;
          return {
            next() {
              return i == 0 ? {done: true} : {value: i--, done: false};
            },
            [Symbol.iterator]() { //추가된부분
              return this;
            }
          }
        }
      };

     

    아래와 같이 사용이 가능해짐

      let iterator = iterable[Symbol.iterator]();
      iterator.next();
      for (const a of iterator) log(a);

     

     

    전개 연산자

    ... 키워드를 붙이면 전체를 확인가능

    console.log(...collections() )

    댓글

Designed by Tistory.