_pipe, _go

devjune·2021년 9월 26일
0

ES5

목록 보기
7/14

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 });
profile
개발자준

0개의 댓글