모든것을 함수로 만드는것이 효율적이고 유동적이며, 코드도 깔끔하다.
예시를 들어보겠다.
모든 배열은 .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 |