pipe 함수
function _reduce(list, iter, memo) {
if (arguments.length == 2) {
memo = list[0];
list = _rest(list);
}
_each(list, function(val) {
memo = iter(memo, val);
});
return memo;
}
function _pipe() {
var fns = arguments;
return function(arg) {
return _reduce(fns, function(arg, fn) {
return fn(arg);
}, arg);
}
}
var f1 = _pipe(
function(a) { return a + 1 }, // 1 + 1
function(a) { return a * 2}); // 2 * 2
console.log( f1(1) );
pipe함수는 여러개의 함수를 연속적으로 실행할 때 유용하다.
pipe함수는 함수를 리턴하는 함수이다.
go 함수
첫번째 인자로 값을 받고, 두번째 인자부터 함수를 받은 후 결과를 만드는 함수.
function _go(arg) {
var fns = _rest(arguments);
return _pipe(null, fns)(arg);
}
_go(
1,
function(a) { return a + 1 },
function(a) { return a * 2 },
function(a) { return a * a },
console.log);
이전에 사용했던 코드에 go를 적용해보자.
console.log(
_map(
_filter(users, function(user) { return user.age >= 30 }),
_get('name')));
console.log(
_map(
_filter(users, function(user) { return user.age < 30 }),
_get('name')));
//go() 적용
_go(
users,
_filter(function(user) { return user.age >= 30; });
_map(_get('name'));
console.log);
_go(
users,
_filter((user) => user.age >= 30;);
_map(_get('name'));
console.log);
화살표 함수
var a = function(user) { return user.age >= 30; };
var a = user => user.age >= 30;
var add = function(a, b) { return a + b; };
var add = (a, b) => a + b;
객체형을 return 하는 함수를 만든다면 다음과 같이 할 수 있다.
var add = (a, b) => ({ var: a + b });