인자로 함수리스트를 받아 첫 번째 인자값을 초기값으로 하여, 두 번째 인자부터 함수들의 리스트를 받아 반환 값을 다음 함수로 넘겨 함수를 리턴합니다.
예를들어 go(0, f1,f2,f3,f4..,fn)으로 go라는 함수를 호출하게 될 경우 0을 초기값으로 다음 인자값으로 넘어온 함수들에게 차례차례 각각의 반환값을 전달하면서 결과들이 축약되어 최종 fn(...f4:return)이 수행되는 것입니다.
이전에 작성했던 reduce를 응용해서 구현해 봅니다.
const go = (...args) => reduce((a,f)=>f(a), args);
테스트 코드
go(
0,
a => a+1,
a => a+10,
a => a+100,
log
) // 111
go 함수와의 가장 큰 차이점은 go는 인자값으로 들어온 함수에서 즉시실행하여 결과값을 반환해 다음 함수로 전달한다면 pipe 함수는 함수자체를 반환하여 최종적으로 인자값으로 받은 함수리스트를 합성해서 합성된 합수를 가지고 로직을 수행합니다.
pipe 함수 flow