Front-end/JavaScript
JS FP 8편 - 함수 합성(Compose, Pipe, Arity)
파리외 개발자
2023. 3. 13. 00:24
Compose
//Compose
//data >> fn >> data >> fn >> data
const compose = (f, g) => (data) => f(g(data));
const multiplyBy3 = (num) => num * 3;
const makePositive = (num) => Math.abs(num);
const multiplyBy3AndAbsolute = compose(multiplyBy3, makePositive);
multiplyBy3AndAbsolute(-50);
multiplyBy3은 3을 곱해주는 함수이다.
makePositive는 절댓값으로 변경해 주는 함수다.
compose는 커링기법으로 두 함수 f와 g를 인자로 먼저 받고
데이터를 이후에 받아서 먼저 받은 두 함수를 g -> f순으로 적용시킨다.
Pipe
//Pipe
const pipe = (f, g) => (data) => g(f(data));
pipe는 compose와 별 차이점이 없다.
compose는 우측, g함수부터 적용시키고 이후 f를 적용시켰다면
pipe는 좌측, f부터 적용을 시키고 이후 g를 적용시킨다는 차이점이 있다.
Arity
항수(arity)는 함수의 오퍼랜드의 개수를 뜻한다.
//Arity
// compose -> 2, multiplyBy3 -> 1
위 코드에서 compose와 pipe는 함수가 가진 오퍼랜드가 2개이므로
arity는 2이다.
반면 compose를 구성하는 데 사용된 multyplyBy3이나 makePositive함수는
arity가 1이다.