티스토리 뷰
커링
- 함수와 인자를 다루는 방법
- 필요한 인자가 다채워지면 함수 실행 (중요한 개념)
함수를 조합해 나가는 개념이다!! 함수형 프로그래밍의 대표적 예이다.
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라는 기법은 분명 간편하게 쓰일수 있을 것 같긴한데, 사실 아직 감이 안잡힌다..ㅎ
'Programming Skills > 함수형 프로그래밍' 카테고리의 다른 글
함수형 프로그래밍- reduce함수 (0) | 2018.02.27 |
---|---|
함수형 프로그래밍 -다형성 (0) | 2018.02.06 |
함수형프로그래밍-map,filter (0) | 2018.02.01 |
함수형 프로그래밍-요즘개발이야기,함수형 프로그래밍정의 (0) | 2018.01.31 |
함수형프로그래밍-일급함수, add_maker,함수로 함수 실행하기 (0) | 2018.01.31 |
댓글