ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JavaScript 코드를 값으로 다루어 표현력 높이기
    프로그래밍/JavaScript 2019. 6. 3. 17:27
    반응형

    Go

    <script>
      const go = (...args) => reduce((a, f) => f(a), args);
      const pipe = (f, ...fs) => (...as) => go(f(...as), ...fs);
    
      go(
        add(0, 1),
        a => a + 10,
        a => a + 100,
        log);
      // 111
    
      const f = pipe(
        (a, b) => a + b,
        a => a + 10,
        a => a + 100);
    
      log(f(0, 1));
    </script>

    Pipe

    함수를 반환하는 함수

    GO를 사용하여 가독성 좋은 코드 개발

    <script>
      log(
        reduce(
          add,
          map(p => p.price,
            filter(p => p.price < 20000, products))));
    
      go(
        products,
        products => filter(p => p.price < 20000, products),
        products => map(p => p.price, products),
        prices =>   reduce(add, prices),
        log);
    
      go(
        products,
        filter(p => p.price < 20000),
        map(p => p.price),
        reduce(add),
        log);
    </script>

    Go 와 Curry를 활용하여 가독성 좋은 코드 개발

    <script>
      const mult = curry((a, b) => a * b);
      log(mult(3)(2));
    
      const mult3 = mult(3);
      log(mult3(10));
      log(mult3(5));
      log(mult3(3));
    </script>

    함수 조합으로 함수 만들기

    <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>

    수강 후기

    앞 강좌의 go 함수까지는 괜찮았지만 curry라는 개념이 너무나 어려웠다. 여러번 돌려봤는데도 불구하고 명확하게 이해가 되질 않아 따로 JavaScript Curry에 대해서 검색을 해보았더니 초심자에게 아주 잘 설명해둔 블로그 가 있었다. 아직까지도 잘 사용하면 코드 활용성을 매우 높일수 있을것같다 라는 느낌적인 부분만 받고 있는데 이를 다음 강좌인 장바구니 예제에서 어느정도 해결할수 있을것이라 기대하고있다. 사실 go와 pipe들도 어려웠는데 구글링을 통해서 어느정도 해결하였다. curry의 경우에도 이 수업에서 배운 코드들과 구글링을 통해 얻은 지식을 조합하니 아주 조금 이해가 된다. 틈틈히 앞에서 배웠던 부분도 구글링 해보아야겠다는 생각이 들었다.

    반응형

    댓글

Designed by Tistory.