_each

joDMSoluth·2020년 3월 13일
0

함수형프로그래밍

목록 보기
15/17
  1. _each로 _filter, _map 리팩토링
function _filter(users, predicate) {
  var new_list = [];
  _each(list, function() {
    if(predi(val)) new_list.push(val);
  });
  return new_list;
}

console.log(
  _filter(users, function(user) { return user.age >= 30; }));

// 재활용성과 다형성이 높은 함수
console.log(
  _filter([1,2,3,4], function(num) { return num % 2; }));


function _map(list, mapper) {
  var new_list = [];
  _each(list, function(val) {
    new_list.push(mapper(val));
  });
  return new_list;
}

function _each(list, iter) {
  for (var i = 0; i< list.length; i++) {
    iter(list[i]);
  }
  return list;
}
  1. each로 외부 다형성 실행하기
  • map, filter 같은 함수들은 javascript에 이미 있다. 그럼 왜 _map, _filter를 따로 구현했을까?
    javascript의 map, filter는 순수함수가 아니라 메서드이다. 객체의 상태에 따라 결과값이 다르기 때문이다.
    차이점 매서드는 해당 클래스의 인스턴스에서만 사용할 수 있는 객체지향 프로그램이다.

  • array_like, arguments, document.querySelectorAll 등은 Array가 아니라 유사배열이다.

console.log(document.querySelectorAll('*'));
// output : 유사객체가 나옴
console.log(document.querySelectorAll('*').map(function(noe) { return node.nodeName; });
// output : map은 메서드가 아닙니다.
            
// _map은 .length만 존재하면 사용 가능
// 유사객체에서도 사용 가능 외부 다형성
console.log(
  _map(document.querySelectorAll('*'), function(node) { return node.nodeName; });
// output : []
// 다형성면에서 사용이 편하다.
  1. 내부 다형성
// 유사배열이나 배열이나 동시에 같이 돌릴 수 있는 것은 _map의 함수의 구현방식에 따라 달라지므로 외부 다형성과 관련이 있다.

// 하지만 내부다형성(배열의 요소의 타입 등)은 predi, iter, mapper와 같은 보조함수가 책임을 진다.
// 배열의 요소가 string인지 number인지 이런거에 따라 달라지는 것
_map([1, 2, 3, 4], function(v) {
  return v + 10;
});
profile
풀스택이 되고 싶은 주니어 웹 개발자입니다.

0개의 댓글