Generator

tapata·2023년 2월 17일
0

JavaScript

목록 보기
7/7

Generator

  • Generator<T = unknown, TReturn = any, TNext = unknown> extends Iterator<T, TReturn, TNext>
  • 함수의 실행을 중간에 멈추고, 재개
  • 실행을 멈추면서 중간 값을 전달
  • 값을 미리 만들어 두지 않고 필요시에 생성
  • Iterator의 일종

methods

  • gen.next(...args: []) => IteratorResult : yield 키워드에 도달할때 까지 실행후 결과 반환
  • gen.throw(e) => IteratorResult : 예외 발생, 결과값 valuecatch 블록의 리턴값
  • gen.return() => IteratorResult

IteratorResult

  • {value, done : boolean | undefined}
function* createFibonacciGenerator() {
  let a = 0;
  let b = 1;
  while (true) {
    yield a;
    [a, b] = [b, b + a];
  }
}

let gen:Generator = createFibonacciGenerator();

let { value, done } = gen.next();

range

function* range(final: number) {
  let i = 0;
  if (isFinite(final) && Math.floor(final) === final) {
    while (i < final) {
      yield i;
      i++;
    }
  } else {
    throw new Error("Integer Only Possible");
  }
}

const nums = [...range(10)] // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


for (let i of range(10)) {
  console.log(i);
}
profile
hello

0개의 댓글