같은 데이터를 가지고 두 가지의 일을 하는 코드가 아래와 같이 있다.
<script>
go(
products,
filter(p => p.price < 20000),
map(p => p.price),
reduce(add),
log);
go(
products,
filter(p => p.price >= 20000),
map(p => p.price),
reduce(add),
log);
</script>
값을 합하는 함수 total_price를 만들어 주고 위에 두 함수에서 중복되는 코드들을 빼서 total_price안에 넣어주면 된다.
<script>
const total_price = pipe(
map(p => p.price),
reduce(add));
go(
products,
filter(p => p.price < 20000),
total_price,
log);
go(
products,
filter(p => p.price >= 20000),
total_price,
log);
</script>
// 30000
// 75000
또 코드를 쪼개서 작성할 수도 있는데 base_total_price라는 함수를 만들어서 함수를 전달을 받고(predi) 아래와 같이 해주고 위에 중복되는 부분은 base_total_price안에 넣어주고 predi함수를 넣어주는 것이다.
<script>
const total_price = pipe(
map(p => p.price),
reduce(add));
const base_total_price = predi => pipe(
filter(predi),
total_price);
go(
products,
base_total_price(p => p.price < 20000),
log);
go(
products,
base_total_price(p => p.price >= 20000),
log);
</script>
// 30000
// 75000
이런식으로 함수형 프로그래밍에서는 고차함수들을 함수의 조합으로 만들어가면서 잘게 나뉘어진 함수들을 계속해서 쪼개면서 중복을 제거하는 식으로 더 많은 곳에서 사용될 수 있게 할 수 있다.
<출처 : 유인동 함수형 프로그래밍과 JavaScript ES6+>
https://www.inflearn.com/course/functional-es6/dashboard
함수형 프로그래밍과 JavaScript ES6+ - 인프런 | 강의
ES6+와 함수형 프로그래밍을 배울 수 있는 강의입니다. 이 강좌에서는 ES6+의 이터러블/이터레이터/제너레이터 프로토콜을 상세히 다루고 응용합니다. 이터러블을 기반으로한 함수형 프로그래밍,
www.inflearn.com
'JavaScript > 함수형 프로그래밍과 JavaScript ES6+' 카테고리의 다른 글
HTML로 출력하기 (0) | 2021.08.19 |
---|---|
장바구니 예제(총 수량, 총 가격) (0) | 2021.08.19 |
go + curry를 사용하여 더 읽기 좋은 코드로 만들기 (0) | 2021.08.19 |
go를 사용하여 읽기 좋은 코드로 만들기 (0) | 2021.08.19 |
코드를 값으로 다루어 표현력 높이기(pipe) (0) | 2021.08.19 |