go

<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>

목차로 이동🚀

pipe

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>

pipe (go와 조합해서 만들기)