Life Developer
인생 개발자
함수형 프로그래밍

모든것을 함수로 만드는것이 효율적이고 유동적이며, 코드도 깔끔하다.

 

예시를 들어보겠다.

 

모든 배열은 .map메서드와 .filter메서드가 있다.

이것을 사용할때 에러가 나면 배열이 아닌것이다.

 

filter와 map메서드를 직접 작성해보자.

 

일단 users 배열을 만든다.

 

var users = [ {
name : '김기범',
age : 32
}, {
name : '정성아',
age : 30
}, {
name : '박지성',
age : 40
}, {
name : '손흥민',
age : 27
}, {
name : '킹스톤',
age : 17
}, {
name : '파이리',
age : 56
}, {
name : '도깨비',
age : 7
} ];

 

출력해보면 잘 나온다.

 

그리고 함수를 만들어 새로운 배열에 값들을 넣어보자. (나이가 30초과 인 객체들만)

 

function fn1(list) {

       var new_list=[];

       for(var i=0; i<list.length;i++){

                  if(list[i].age>30){

                          new_list.push(list[i].age);

                  }

       }

       return new_list;

}

 

 

함수형 프로그래밍을 모르고 적응이 안된 사람들은 이렇게 작성할 것이다.

 

이것을 함수를 사용하여 깔끔하게 해보자.

 

일단 for문 안에 if문을 함수로 만들어보자.

 

function fn2(list, fn) {

                  var new_list = [];

                  for (var i = 0; i < list.length; i++) {

                                   if (fn(list[i])) {

                                               new_list.push(list[i]);

                                   }
                  }
                  return new_list;
}

 

 

이렇게 함수를 부를때 파라미터로 함수를 주면 된다.

 

함수는 자바스크립트에서 뭐다? 값이다. 잊지말자.

 

저렇게 되면 출력할때는 이렇게 함수를 주면된다.

 

console.log(fn2(users, function(val) {
                                    return val.age < 20;
                                    }

));

 

저기서 for문도 거슬린다.

 

저것조차 함수로 만들어서 호출을 해보자.

 

function fn3(list, fn) {
                var new_list = [];
                _each(list, function(val) {
                         if (fn(val)) {
                                 new_list.push(val);
                         }
                });
                return new_list;
}

 

for문을 _each(list, fn) 이라는 함수에 넣어버렸다.

 

이것을 위임이라고 한다.

 

function _each(list, fn) {
          for (var i = 0; i < list.length; i++) {
                  fn(list[i]);
          }
}

 

출력은 이렇게.

console.log(fn3(users, function(val) {
                                    return val.age < 18;
                             }

));

 

함수는 2개 나오지만 깔끔하고 실용적이다.

 

호출할때 함수를 만들어서 사용하기 때문에.

 

 

'Developer' 카테고리의 다른 글

DataSource  (0) 2020.08.03
프로젝트 아키텍쳐  (0) 2020.08.03
고차함수란?  (0) 2020.07.31
인코딩이 무엇인가? 유니코드는 또 뭐야  (0) 2020.07.31
replace와 translate 차이점  (0) 2020.07.31
  Comments,     Trackbacks