pipe, go

jodmsoluth·2020년 3월 13일
0

함수형프로그래밍

목록 보기
12/17
  1. _pipe
    함수들을 인자로 받아서 이 함수를 연속적으로 실행해주는 함수이다.
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;
  function(a) { return a * a; },
); 

console.log( f1(1) );
  1. _go
    즉시 실행하는 _pipe 함수
function _go() {
  var fns = _rest(arguments);
  // 유사배열인 arguments를 사용할 수 있게 한다.
  _pipe.apply(null, fns)(arg);
}

_go(1,
    function(a) { return a + 1; },
    function(a) { return a * 2; },
    function(a) { return a * a; },
    console.log);

// 복습
consle.log(
_map(
  _filter(users, function(user) {return user.age >= 30; }),
  _get('name')));

consle.log(
_map(
  _filter(users, function(user) {return user.age < 30; }),
  _get('age')));

// 위의 코드를
_go(users,
    function(users) {
  		return _filter(users, function(users) {
    		return user.age >= 30;
  		});
	},
    function (users) {
  		return map(users, _get('name'));
	},
    console.log);
// ---
_go(users,
    function(users) {
  		return _filter(users, function(users) {
    		return user.age < 30;
  		});
	},
    function (users) {
  		return map(users, _get('name'));
	},
    console.log);

// curryr을 사용하여 위의 코드 더 간결하게
var _map = _curryr(_map),
    _filter = _curryr(_filter)

_go(users,
    _filter(user => user.age < 30),
    _map(_get('age')),
    console.log);
profile
풀스택이 되고 싶은 주니어 웹 개발자입니다.

0개의 댓글