[함수형프로그래밍과 ES6+] 3. generator

fano·2021년 1월 26일
0

Generator

이전 강의의 사용자 정의 iterator를 js언어 차원에서 구현한 것

Generator는 well-formed iterator를 생성, 반환하는 함수이다.


function *gen () { // 함수명 앞에 '*'표시를 한다.
	yield 1; // yield 키워드를 통해서 순차적으로 반환할 value프로퍼티의 값을 정의할 수 있다.
  	yield 2;
  	yield 3;
  
  	return -1; // return되는 값은 done프로퍼티의 값이 true가 될 때 반환되는 value프로퍼티 값을 정의한다 !return값은 next()를 통해서만 얻을 수 있는 값
}

generater의 의의

generator의 가치는 if, while, for문 등의 조건, 반복문을 통해서 여러 형태의 iterator를 하나의 함수가 만들어낼 수 있다는 것이다.


// 최대값인 n을 인자로 전달해 홀수만 yield하는 함수
function *generateOdds (n) { 
  for (let i = 0; i < n; i++) {
  	if (i % 2) yield i
  }
}

genrator는 실행 중 일시정지된다.

generator는 next메서드로 yield값을 하나 리턴했다면, 다음 next메서드가 호출될 때까지 실행이 일시정지된다. 평가가 말그대로 중지되며 next메서드가 호출되면 중지된 지점부터 다시 함수가 실행된다.

// 무한으로 'hi'를 value프로퍼티의 값으로 할당하는 generator
function *generateInfiniteHi() {
	while (true) yield 'hi'
}

const iterator = generateInfiniteHi();

iterator.next(); // 실행 시, 무한루프로 런타임이 멈추지 않는다. generateInfiniteHi의 실행이 다음 next메서드가 호출될 때까지 작동을 멈춘 것
profile
서비스를 생각하는 개발

0개의 댓글