본문 바로가기
Archive

제너레이터

by livemehere 2022. 9. 4.

함수는 하나의 값을 반환하지만, generator 는 여러개의 값을 필요에 따라서 하나씩 반환(yield)한다.

function* 로 선언할 수 있다.

function* generator() {
  yield 1;
  yield 2;
  return 3;
}
let gen = generator();
console.log(gen.next()); // {value: 1, done: false}
console.log(gen.next()); // {value: 2, done: false}
console.log(gen.next()); // {value: 3, done: true}
console.log(gen.next()); // {value: undefined, done: true}

for.. of

마지막 return 값은 무시한다.

(done : true 일때의 value를 무시함)

function* generator() {
  yield 1;
  yield 2;
  return 3;
}
let gen = generator();

for (let x of gen) {
  console.log(x); // 1 , 2
}

spread 문법 사용

도 가능하다.

function* generateSequence() {
  yield 1;
  yield 2;
  yield 3;
}

let sequence = [0, ...generateSequence()];

alert(sequence); // 0, 1, 2, 3

활용

start ~ end 사이의 숫자를 .next() 마다 반환

function* generateSequence(start, end) {
  for (let i = start; i <= end; i++) yield i;
}

 

 

yield* 문법으로 다른 제너레이터를 끼워넣을 수 있다.

function* generateSequence(start, end) {
  for (let i = start; i <= end; i++) yield i;
}

function* generatePasswordCodes() {

  // 0..9
  yield* generateSequence(48, 57);

  // A..Z
  yield* generateSequence(65, 90);

  // a..z
  yield* generateSequence(97, 122);

}

let str = '';

for(let code of generatePasswordCodes()) {
  str += String.fromCharCode(code);
}

alert(str); // 0..9A..Za..z

 

제너레이터는 이제껏하면서 정말 쓸일이 별로없었는데,

redux-saga를 사용할 때 쓴 코드를 본적은 있다.

알아만 두련다..!

반응형

'Archive' 카테고리의 다른 글

stompJS에 기여하기와 한단계 성장한 느낌  (0) 2022.09.16
JS 모듈  (0) 2022.09.04
Promise의 5가지 API  (0) 2022.09.04
try ... catch 와 에러 핸들링  (0) 2022.09.04
내장 클래스 확장하기  (0) 2022.09.03