function *gen(){ //앞에 *을 붙임
yield1;
yield2;
yield3;
return 100; // {value : 100, done: true}로 출력, 순회에는 포함 X
}
//map 함수
function map(f){
return function* (iter){
for(const a of iter) yield f(a);
}
}
//filter 함수
function filter(f){
return function* (iter){
for(const a of iter) if(f(a)) yield(a);
}
}
//reduce 함수
function reduce(f){
return function (acc, iter){
if(!iter){
iter = acc[Symbol.iterator]();
acc = iter.next().value;
}
for(const a of iter) acc = f(acc, a);
return acc;
}
}
go(
1,
a + 10,
a + 100,
a + 1000,
log
)
let pipe = () => () => {} //함수 리턴
const make_pipe = pipe(
a => a+1,
a => a-1
);
for of가 단순 for문과 같은 방식으로 작동하는 줄 알고 있었는데 이번 강의를 통해서 iterator를 배우면서 완전히 다른 방식의 반복문이라는 것을 알게 됐다. 배열 뿐만 아니라 iterator를 사용할 수 있는 map, filter, reduce함수를 직접 구현해보면서 이론적으로 알고있던 함수가 내부에서 어떤 로직으로 원하는 값을 계산해 주는지도 공부할 수 있었다. 강의를 통해 'curry'를 배웠는데 아직 이 부분을 완전히 이해하지 못했다. 이론적인 부분은 어느정도 이해가 가지만 어떤 방식으로 코딩해야 하는지는 계속해서 사용해보고 이것을 활용한 코드들을 많이 접하면서 배워나가야 할 것 같다. 주말에 'curry'에 대해 더 깊게 공부할 생각이다.