Javascript: 기능 구성

한 함수의 결과가 다음 함수로 전달되는 방식입니다.

const add = (x, y) => x+y;

const subtract = (x) => x-4;

const multiply = (x) => x * 8;

// result of `add` is passed to `subtract` and its result passed to `multiply`.
const result = multiply(subtract(add(2, 3)));

result;
> 8


읽기 쉬워 보이지만 차례로 호출할 함수가 더 있으면 어떻게 될까요?
좀 더 깔끔한 접근 방식을 시도해 봅시다.

const compose = (...functions) => x => functions.reduceRight((total, f) => f(total), x);

const add = x => x+2;

const subtract = x => x-1;

const multiply = x => x * 8;

compose(multiply, subtract, add)(2);
> 24


또한 reduce를 사용하여 다음을 구현할 수 있습니다.

const pipe = (...functions) => x => functions.reduce((total, f) => f(total), x);

const add = x => x+2;

const subtract = x => x-1;

const multiply = x => x * 8;

pipe(add, subtract, multiply)(2);
> 24

pipe - 왼쪽에서 오른쪽으로 수행합니다.compose - 오른쪽에서 왼쪽으로 수행합니다.

좋은 웹페이지 즐겨찾기