함수형 프로그래밍은 프로그래밍 패러다임의 한 종류이고 어떤한 언어에도 적용할 수 있다.
1급 객체란 다음 조건을 만족하는 객체를 말한다.
자바스크립트에서 함수는 객체이므로 1급 객체로 분류 된다.
참고: 부수효과 참조 투명성
순수 함수란 함수형 프로그래밍에 필요한 개념으로 아래 조건을 만족한다.
순수 함수를 호출하면 프로그램의 어떠한 변화도 없고, 입력 값에 대한 결과를 예상할 수 있어서 테스트하기 쉽다.
합성 함수란 새로운 함수를 만들거나 계산하기 위해 둘 이상의 함수를 조합하는 과정을 말한다. 함수형 프로그래밍은 여러개의 작은 순수 함수들로 이루어져 있기 때문에 이 함수들을 연쇄적으로 호출하여 프로그램을 구축해야 한다.
const sum = set => [...set].reduce((total, v) => (total += v));
const isFactor = number => potentialFactor => number % potentialFactor === 0;
const factors = number => {
return new Set(
Array(parseInt(Math.sqrt(number)))
.fill()
.map((v, i) => i + 1)
.filter(isFactor(number))
.reduce((res, v) => {
res.push(v);
res.push(number / v);
return res;
}, []),
);
};
const classifierAlpha = number => sum(factors(number)) - 2 * number;
f의 두 개의 인수를 커링하는 함수 curry(f)를 생성해보자.
다른 말로 하면, f(a, b)처럼 두 개의 인수를 요구하는 함수를 f(a)(b) 형식으로 변환하는 curry(f)라는 함수를 만드는 것이다.
function curry(f) {
// 커링 변환을 하는 curry(f) 함수
return function (a) {
return function (b) {
return f(a, b);
};
};
}
// usage
function sum(a, b) {
return a + b;
}
let curriedSum = curry(sum);
alert(curriedSum(1)(2)); // 3