파트6. 장바구니 예제 - ChoDragon9/posts GitHub Wiki

가격과 수량을 총합을 가져오는 함수를 예로 중복코드를 제거하는 예제입니다.

const totalPrice = pipe(
  map(p => p.price * p.quantity),
  reduce((a, b) => a + b)
);
const totalQuantity = pipe(
  map(p => p.quantity),
  reduce((a, b) => a + b)
);

합계를 계산하는 부분을 함수로 만들수 있습니다.

const sum = (mapper, iterable) => go(
  iterable,
  map(mapper),
  reduce((a, b) => a + b)
);

const totalPrice = product => sum(p => p.price * p.quantity, product);
const totalQuantity = product => sum(p => p.quantity, product);

커링을 사용하면 인자를 더욱 줄일 수 있습니다.

const sum = curry((mapper, iterable) => go(
  iterable,
  map(mapper),
  reduce((a, b) => a + b)
));

const totalPrice = sum(p => p.price * p.quantity);
const totalQuantity = sum(p => p.quantity);