생성기 - 괴상한 조각

ECMAScript 6 초안 사양은 이미 현대 JavaScript 개발자에게 많은 기쁨을 안겨 주었습니다. 이전 게시물에서 몇 가지 새로운 컬렉션 클래스와 for..of 반복 루프를 다뤘습니다. 이 게시물에서는 for..of 루프와 함께 사용되는 생성자 함수에 대해 알아봅니다.

이미 생성기를 사용하는 이유와 방법을 다루는 유용한 자료많이 있습니다. 간단히 말해 생성기는 이터레이터를 만드는 특수 함수이고, 이터레이터는 값을 가져오기 위해 호출할 수 있는 next() 메서드가 있는 객체입니다. 생성자 함수 내에서 yield 키워드는 next()의 값을 제공합니다. yield를 사용하면 생성자 함수의 실행이 정지되어 next()가 다시 호출될 때까지 상태가 유지됩니다. 이때 코드는 다시 시작되어 다른 값을 yield할 때까지 (또는 생성자 함수가 종료될 때까지) 계속 실행됩니다. 생성자 함수에는 피보나치 수열의 숫자를 반복하는 데 사용하는 것과 같은 여러 표준 사용 사례가 있습니다.

기본사항을 살펴본 후 생성자를 사용할 때의 몇 가지 문제점 또는 '까다로운 부분'을 다루는 JavaScript 샘플을 자세히 살펴보겠습니다. 코드 전체에 광범위한 주석이 있으며, 코드를 읽기 전에 코드의 실시간 버전을 사용해 볼 수 있습니다.

코드에서 얻을 수 있는 중요한 사항은 무엇인가요?

먼저 생성기를 생성하면 고유한 상태를 가진 고유한 반복기가 생성되며, 동작을 제어할 수 있는 매개변수를 생성자 생성자에 전달할 수 있습니다.

두 번째로, 반복자의 next() 메서드를 호출할 때 매개변수를 전달할 수 있으며, 이 값은 이전 반복자 호출의 yield 문에 있는 왼쪽에 할당됩니다. 이는 반복자의 출력을 변경하는 좋은 방법입니다. 여기서는 반환된 단어가 대문자인지 아닌지를 제어하는 데 사용합니다. 생성된 첫 번째 값에 영향을 미치려면 생성기 생성자의 매개변수를 통해 영향을 미치세요.

마지막으로 생성기는 유한 반복자 또는 무한 반복자를 생성할 수 있습니다. 무한 반복자를 사용하는 경우 yielded 값을 기반으로 하는 일종의 터미널 조건이 있는지 확인합니다. 특히 반복에 for..of를 사용할 때는 실수로 무한 루프를 작성하기가 매우 쉽습니다. next() 호출을 통해 유한한 반복자를 사용하는 경우 반환된 객체의 .done 속성은 반복이 완료되었는지 여부를 나타냅니다.

이 샘플과 웹에서 제공되는 다른 리소스를 통해 생성기를 자체 코드에서 사용하는 방법을 생각해 보시기 바랍니다. Firefox 31부터 Chrome 39부터 생성기를 기본적으로 지원합니다. Regenerator 프로젝트는 다른 브라우저에 생성기 지원을 제공하며 Traceur를 사용하는 것도 가능합니다.

이 도움말 검토에 도움을 주신 에릭 아르비드손님께 감사드립니다.