코드를 값으로 다뤄본다.
코드를 값으로 다룰 수 있다.
코드의 표현력을 높일 수 있다.
코드를 값으로….
const array = [1,2,3];
const iter = array[Symbol.iterator]();
iter.next(); // { value : 1 , done : false }
iter.next(); // { value : 2 , done : false }
iter.next(); // { value : 3 , done : false }
iter.next(); // { value : undefined , done : true }
const go = (...args) => reduce((a, f) => f(a), args);
const pipe = (f, ...fs) => (...as) => go(f(...as), ...fs);
go(
0,
a => a + 1,
a => a + 10,
a => a + 100,
log);
// 111
const f = pipe(
(a, b) => a + b,
a => a + 10,
a => a + 100);
log(f(0, 1));
go(
products,
products => filter(p => p.price < 20000, products),
products => map(p => p.price, products),
prices => reduce(add, prices),
log);
const curry = f =>
(a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._);
const mult = curry((a, b) => a * b);
const mult3 = mult(3);
더 나은 표현 찾기
// curry function을 사용해 go, pipe 를 정리