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이다.