2018년 2월 11일 일요일

JAVASCRIPT CURRY 기법

CURRY 는 특정함수의 인자를 모두 가지고 실행하는게 아니고,
인자중 일부 인자만 가진 일부함수를 만든다음, 그걸 이용해서 원래의 함수를 실행하는 방법이다.

function _curry(fn) {
   return function (a){
      return function (b) {
           return fn(a,b);
      }
   }
}

var add = _curry(function(argA , argB) {
return a+b
});

add 함수는 단지 _curry 함수가 function(argA,argB) 인 상태이다.

var add10 = add(10);   // 여기서는 그냥 functon(a) 의 상태값만 가진다.
var result = add10(5): // add10 함수 즉, function(a)의 내부 function (b) 에 5를 전달해주고, return  으로 _curry 함수가 원래 가지고 있던 function(argA , argB) {return a+b} 를 리턴해 준다.

이걸 어따쓴다고?

--------------------
function _curryr(fn) {
   return function (a){
     return function (b) {
        return fn(b,a);
} }}



var _get = _curryr(function(argA , argB) {
return argA=null ? undefined: argA[argB]

});


var user = [
   {name:"name1", spec:"eng1", age:10},
   {name:"name2", spec:"eng2", age:30},
   {name:"name3", spec:"eng3", age:31}

];

function _map(list, mapper) {
console.log(mapper);
   var new_list=[];
   for(var i=0; i < list.length; i++) {
      //console.log(list[i]);
        new_list.push(mapper(list[i]));
        //위와 같은 거 , new_list.push(_get("name")(list[i]));
   }
   return new_list;
}


console.log(_map(user, _get("name")));

배열의 경우
var _length = _get("length");
_length 는 어떤 값이 들어올지 모른다. 그냥 length 값만 되돌려줄 준비만 한다.
var size = _length(array);
array 의 length 값을 돌려준다.
array 가 null 이 와도 _get함수에서 걸러주기 때문에 for 문 등에서 에러가 나지 않는다.


var _length=_get("length");

var b=null;
     
   for(var i=0; i < _length(b); i++) {
      console.log(b[i]);
       
   }

null 인데도 에러없다.

0 comments:

댓글 쓰기