reject
주어진 조건에 해당하는 요소만 거르는 함수
단순히 filter함수에 들어온 보조함수 predi를 함수로 캡슐화하여 평가 시점을 조절
/*단순히 filter에 반대로 행동하는 함수
(== 주어진 조건에 해당하는 값을 반환하는 함수*/
function reject(list, predi){
return filter(list, val => !predi(val));
}
console.log(
_.filter(users, user=>user.age>30),
_.reject(users, user=>user.age>30),
)
negate
결과를 반전시키는 함수
/*결과를 반대로 바꾸는 함수*/
function negate(predi){
return val => !predi(val);
}
단순히 predi 함수를 인자로 받아 평가 시점을 조절
const testArr = [undefined, Infinity, null, NaN, 0, 1, 'true','false',true,false];
console.log(
_.filter(_.identity)(testArr),
_.filter(_.negate(_.identity))(testArr)
);
/*단순히 filter에 반대로 행동하는 함수
(== 주어진 조건에 해당하는 값을 반환하는 함수*/
function reject(list, predi){
return filter(list, negate(predi) );
}
negate 를 적용했다.
compact
참으로 판단되는 값들만 걸러내는 함수
/*참으로 판단되는 값을 걸러내는 함수*/
function compact(list){
return filter(list, identity);
}
const compactEx = _.filter(_.identity);
console.log(
compactEx(testArr),//이것과 완전히 같다.
_.compact(testArr)
)
/*
compactEx
b => fn(b,a) b는 _.filter , a는 _.identity , b로 testArr
_.compact
function compact(list){
return filter(list, identity);
}
화살표 함수로 바꾸면
list => filter(list, identity)
기호만 바꾸면
b => fn(b,a)
*/
지금까지 예제를 보면 함수르를 중첩해서 사용하고 있음을 볼 수 있다.
이처럼 순수함수들의 평가 시점을 다루거나 함수가 함수를 리턴하거나 함수가 함수를 대신 실행해주거나 함수들의 응용과 조합을 강조하는 것이 함수형 프로그래밍이다.
10개 기능이 많은 함수나 클래스 보다 서로 다른 작은 100개의 함수를 만들어 함수를 조합하는 것이 프로그래밍에 유리하다. 이는 객체지향 SCP(single responsibility principle)를 준수하는 것과 비슷하다.
단일 책임 원칙을 준수하면 좋은 디버깅 포인트를 제공하며, 리팩터링에 유리해져 변화에 강한 프로그램을 만들어 준다.
'개발 > 함수형 프로그래밍' 카테고리의 다른 글
10 - 컬렉션 중심 프로그래밍 - reduce(접기) (0) | 2023.06.19 |
---|---|
09 - 컬렉션 중심 프로그래밍 - find(찾기) (0) | 2023.06.18 |
07 - 컬렉션 중심 프로그래밍 - map (수집하기) (0) | 2023.06.17 |
06 - 다형성 높이기 (0) | 2023.06.16 |
05 - 파이프라인, pipe, go (1) | 2023.06.14 |