이터레이더와 제너레이터 ES6
ES6에서! 이터레이터와 제너레이터가 도입됨.
제너레이터는 간단히 이터레이터에 의존하는 개념!
배열은 이터러블 객체의 좋은 예이다
이터레이터 예제 (배열) 및 호출해보기
1 | const arrays = [ |
done 프로퍼티가 true로 바뀌는 것을 볼수 있다. 이터레이터의 데이터는 끝까지 읽을수 있음을 느낄수 있다.
done 프로퍼티 활용해보기
1
2
3
4
5
6
7
8 let test = arrays.values();
let currentLocation = test.next();
while(!currentLocation.done){
console.log(currentLocation.value);
currentLocation = test.next();
}
제너레이터
제너레이터란 이터레이터를 사용해 자신의 실행을 제어하는 함수!
일반적인 함수 vs 제너레이터
1 | [일반적인 함수] |
제너레이터 2가지 새로움 개념
- 하나의 함수의 실행을 개별적 단계로 나눔으로써 함수의 실행을 제어
- 실행 중인 함수와 통신
제너레이터는 언제든 호출자에게 제어권을 넘길수 있다.
제너레이터는 호출한 즉시 실행되지 않는다. 대신 이터레이터를 반환하고, 이터레이터의 next 메서드를 호출함에 따라 실행된다.
제너레이터를 만들때 function 키워드 뒤에 애스터리스크(*)을 붙인다. 이것을 제외하면 문법은 일반적인 함수와 같다. 제너레이터에서 return외에 yield가 있음.
제너레이터 예제 및 호출 법
1 | function* arrays { |
활용 방법
1 | for(let a of arrays()){ |
실행중인 함수와 통신을 해보자 ex)
1 | function* test(){ |
실행
1
2
3
4
5
6
7 t.next();
-> {value: "what is your car?", done: false}
t.next('good car');
-> {value: "what is your favorite color?", done: false}
t.next('red');
-> {value: "good car 의 색은 red 입니다", done: true}
제너레이터는 => 를 쓸수 없음!!
제너레이터를 쓰게 될 경우 주요한 값을 return으로 반환하지말자!, 반환 값을 사용하려 할때는 yield를 써야 한다. 되도록 제너레이터에서 return을 쓸 때는 반환값을 쓰지 않는 습관들을 들이길 권한다!.
어디 활용할지… 나중에 바로 볼수 있게… 블로그 남김…