💡 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다.
💡
console.clear();
을 통해 console을 깨끗이 할 수 있다.
이터레이터이자 이터러블을 생성하는 함수
이터레이터를 리턴하는 함수
일반 함수에서 *을 붙여 만든다.
function* gen() {
yield 1;
yield 2;
yield 3;
return 100;
}
let iter= gen();
log(iter.next());
log(iter.next());
log(iter.next());
log(iter.next());
for (const a of gen()) log(a);
제네레이터의 리턴값은 순회할 때 나오는 값이 아니라, done을 할 때 나오는 값이다.
yield
를 통해 만들기function *odds() {
yield 1;
yield 3;
yield 5;
}
constiter2= odds();
log(iter2.next());
log(iter2.next());
log(iter2.next());
for문
으로 만들기function *odds(l) {
for (let i = 0; i < l; i++) {
if(i % 2) yield i;
}
}
constiter2= odds(10);
log(iter2.next());
log(iter2.next());
log(iter2.next());
log(iter2.next());
infinity함수
를 만들어서 만들기function *infinity(i = 0) {
while (true) yield i++;
}
function *odds(l) {
for (const a of infinity(1)) {
if (a % 2) yield a;
if (a === l) return;
}
}
infinity는 이터레이터를 무한대로 만들어내는 함수다.
limit함수
를 만들어서 만들기function *infinity(i = 0) {
while (true) yield i++;
}
function *limit(l, iter) {
for (const a of iter) {
yield a;
if (a === l) return;
}
}
function* odds(l) {
for (const a of limit(l, infinity(1))) {
if (a % 2) yield a;
}
}
log(...odds(10));
log([...odds(10), ...odds(20)]);
const [head, ...tail] = odds(5);
log(head); // 리스트의 맨 앞
log(tail); // 나머지
const [a,b, ...rest] = odds(10);
log(a); // 리스트의 첫번째 요소
log(b); // 리스트의 두번째 요소
log(rest); // 나머지