JS에도 generator가 있다는건 처음 알았네. Python generator 개념과 완전히 같은걸까?

(공부 - Python generator 복습)

 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function* 

 

function* expression - JavaScript | MDN

The function* keyword can be used to define a generator function inside an expression.

developer.mozilla.org

 

예제 코드

(`yield *range ~`로 recursion 호출하는 부분이 너무 생소하다)

function* range(start, end) {
    yield start;
    if (start === end) return;
    yield* range(start + 1, end); // Q. way to write recursion of generator in JS?
}

const gen = range(1, 10);
// console.log(gen.next())
// console.log(gen.next().value)

let done = false;
while(!done){
    let res = gen.next();
    console.log(res.value);
    done = res.done;
}

 

요 예시도 좋은 듯.

그냥 일반 function vs generator

generator supports 'lazy evaluation' (공부 - PL 복습, functional programming)

let x = function*(y) {
   yield y * y;
};
console.log(typeof x, x(4), x(4).next(), x(4).next().value)

 

 


TS로 typing하면?

function* range(start: number, end: number): Generator<number, void> {
    yield start;
    if (start === end) return;
    yield* range(start + 1, end);
}

참고) https://www.typescriptlang.org/docs/handbook/iterators-and-generators.html

'<언어> > [Typescript]' 카테고리의 다른 글

내가 만든 custom type 관리하는 방법  (0) 2022.02.12

+ Recent posts