<aside> 💡 함수형 프로그래밍에서는 코드를 값으로 다루는 아이디어를 많이 사용한다 코드를 값으로 다룰수 있기 때문에 어떤 함수가 코드인 함수를 받아서 평가하는 시점을 원하는대로 다룰수 있게 된다 → 코드의 표현력을 높히는 많은 아이디어 발생!
</aside>
go(
0,
(a) => a + 1,
(a) => a + 10,
(a) => a + 100
)
<aside> 💡 어떻게 진행할까?
</aside>
// 나머지 연산자를 통해서 배열행태로 변수들을 받는다
// 이는 곳 iterable한 상태로 reduce를 사용할 수 있다는 뜻!
const log = console.log
const go = (...args) => reduce((acc, f) => f(acc), args)
go(
0,
(a) => a + 1,
(a) => a + 10,
(a) => a + 100,
log
) // 111
<aside> 💡 이렇게 원하는 방식으로 함수의 조합. 변경에 굉장히 용이하다는 것을 알 수 있었다 아주 흥미롭고 재밋다..
</aside>
const log = console.log
const pipe = ?? // pipe를 정의하는게 목표!
const f = pipe(
(a) => a + 1,
(a) => a + 10,
(a) => a + 100
)
log(f(0))
const log = console.log
const pipe = (...args) => (acc) => reduce((el, f) => f(el), acc, args)
const f = pipe(
(a) => a + 1,
(a) => a + 10,
(a) => a + 100
)
log(f) // (acc) => reduce((el, f) => f(el), acc, args)
log(f(0)) // 111
const log = console.log
const pipe =
(f, ...fs) => (...el) => reduce((acc, f) => f(acc), f(...el), fs)
const f = pipe(
(a, b) => a + b,
(a) => a + 10,
(a) => a + 100
)
log(f) // (...el) => reduce((acc, f) => f(acc))
log(f(1, 3)) // 114
<aside> 💡 이제 위에서 만들었던 go와 조합해서 pipe를 구현해보자
</aside>