JavaScript/함수형 프로그래밍과 JavaScript ES6+

함수 조합으로 함수 만들기

느리지만 꾸준하게 2021. 8. 19. 19:36

같은 데이터를 가지고 두 가지의 일을 하는 코드가 아래와 같이 있다.

<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