티스토리 뷰

커링
  • 함수와 인자를 다루는 방법
  • 필요한 인자가 다채워지면 함수 실행 (중요한 개념)
함수를 조합해 나가는 개념이다!! 함수형 프로그래밍의 대표적 예이다.

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

//example
var add= _curry(function(a,b){
 return a+b;
})

1.console.log(add(5)(3));

2.var add5=add(5);
console.log(add5(3));

1과2는 같은결과

-심화

아래와 같이 위의 curry함수를 바까야 add(1,2) 같은 형태를 실행시킬수 있음. 기존 함수로 실행하면 함수리턴

function _curry(fn){
 return function(a,b){
   return arguments.length == 2 ? fn(a,b):function(b)
  {return fn(a,b);};
}
}

console.log(add(1,2));


var sub = _curry(function(a,b){
 return a-b;
})

console.log(sub(10,5));
결과 5

//오른쪽에서부터 인자를 적용해나가는 curryr을 구현해보자

function_curryr(fn){
 return function(a,b){
   return arguments.length==2 ? fn(a,b) :function(b)
  {return fn(b,a)};
}
}
var sub = _curryr(function(a,b){
 return a-b;
})

var sub10=sub(10);
console.log(sub10(5));
결과 -5

_curryr과 같이 (오른쪽부터 적용) 함수인자 적용방향에 따라 r을 붙이는 패턴은 많이 쓰인다고한다!!


- get을 만들어 간단히하기


function _get(obj,key){
 return obj == null ? undefined :obj[key];
}
var user1 =users[0];
console.log(user1.name);
console.log(_get(user1, 'name'));

console.log(_get(users[10],'name'));

//curryr 적용

var _get = _curryr(function(obj,key){
 return obj == null ? undefined :obj[key];
});

앞서 했던 map,filter도


//기존코드
console.log(
_map(
_filter(users, function(user) {return user.age >= 30;}),
function(user) {return user.name;}));

//curryr 적용
console.log(
_map(
_filter(users,function(user){return user.age >=30;}),
_get('name')));

과 같이 curryr을 적용하면 간결해진다.

curry라는 기법은 분명 간편하게 쓰일수 있을 것 같긴한데, 사실 아직 감이 안잡힌다..ㅎ

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함