Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

커링(Currying) #4

Open
sa02045 opened this issue Jul 7, 2023 · 1 comment
Open

커링(Currying) #4

sa02045 opened this issue Jul 7, 2023 · 1 comment
Assignees

Comments

@sa02045
Copy link

sa02045 commented Jul 7, 2023

p286) 고차함수 - 함수를 반환하는 함수

function makeAdder(n){
   return function(x){
      return n + x
   }
}

makeAdder(1)(3) // 4

함수를 반환하는 함수로 볼 수도 있고 커링이라고 볼 수도 있는 것 같다!
책에는 직접적으로 커링에 대해서 언급하고 있진 않지만 살짝 맛보기로 알아보도록 해보자

커링(Currying)

f(a, b, c) -> f(a)(b)(c)

다중 인수을 갖는 함수를 단일 인수를 갖는 함수들의 함수열로 변환하는 기법 또는 함수

커링함수

// 커링 변환하는 함수
function curry(func) {
  return function curried(...args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
      return function(...args2) {
        return curried.apply(this, args.concat(args2));
      }
    }
  };
}

function foo(a,b,c){

}



var curryFunction = curry(foo)

// 변환
curryFunction(a)(b)(c)

커링기법의 장점

p287)에 나오듯 고차함수의 장점이 커링의 장점이라고 볼 수 있을것 같습니다.

  • 재사용
  • 가독성
  • 중복제거
  • p283) 고차 함수 행동을 새로운 함수로 감싸 실행을 미룸
  • 등등...

하지만 책에서 경고하듯이 직관적인 방법과 항상 비교하는 것이 중요한것 같다!

하스켈 커링함수

함수형 언어 하스켈은 기본적으로 모든 함수가 커링 변환되어 동작한다

  • 하스켈 함수는 입력 1개 출력 1개
let plus x y = x + y
let f = plus(2)
f(3) // 5

또는
plus 2 3 // 5

Haskell B. Curry라는 수학자

  • 하스켈 언어, 커링 기법의 이름이 유래한 만큼 커링기법은 함수형 프로그래밍과 연관이 많다!

참고

  1. https://itholic.github.io/haskell-function1-currying/
  2. https://ko.javascript.info/currying-partials
@chloe-codes1
Copy link
Member

Currying을 사용하면 함수의 실행을 늦출 수 있다는 장점이 있다

@sa02045 sa02045 self-assigned this Jul 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants