소년코딩

커링(currying)

커링이란 특정 함수에서 정의된 인자의 일부를 넣어 고정시키고, 나머지를 인자로 받는 새로운 함수를 만드는 것이다.

 

function cal(a, b, c) {
    return a + b + c;
}

function curry(fn) {
    var args = Array.prototype.slice.call(arguments, 1);

    return function() {
        return fn.apply(null, args.concat(Array.prototype.slice.call(arguments)));
    }
}

var newFn1 = curry(cal, 1);
console.log(newFn1(2, 3)); // (1 + 2 + 3) = 5

var newFn2 = curry(cal, 1, 3);
console.log(newFn2(4));  // (1 + 3 + 4) = 8

커링

curry() 함수의 역할은 간단하다.

curry() 함수로 넘어온 인자를 args에 담아놓고, 새로운 함수 호출로 넘어온 인자와 합쳐서 함수를 적용한다.

이러한 커링은 함수평 프로그래밍 언어에서 기본적으로 지원하는데, 자바스크립트에서는 기본적으로 지원하지 않는다.

 

그러나 Function.prototype객체에 커링 함수를 정의하여 사용할 수 있다.

Function.prototype.curry = function() {
     var fn = this, args = Array.prototype.slice.call(arguments);
 
     return function() {
          return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
     };
};

 

자바스크립트

by 소년코딩

추천은 글쓴이에게 큰 도움이 됩니다.

악플보다 무서운 무플, 댓글은 블로그 운영에 큰 힘이됩니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기