기본기 — 일급 함수와 고차 함수
함수형 프로그래밍의 출발점은 두 가지 개념이다. 일급(First-class)과 고차 함수(Higher-order function).
평가와 일급
평가는 코드가 계산되어 값을 만드는 것이다. 자바스크립트에서 함수는 일급이다.
- 변수에 담을 수 있다.
- 함수의 인자로 넘길 수 있다.
- 함수의 결과로 반환할 수 있다.
const a = 10;
const add10 = a => a + 10;
const r = add10(a); // 20
일급 함수
함수 자체를 값처럼 다룰 수 있다. 함수가 함수를 리턴하는 것도 가능하다.
const f1 = () => () => 1;
const f2 = f1(); // () => 1
f2(); // 1
고차 함수
함수를 인자로 받거나, 함수를 리턴하는 함수가 고차 함수다.
함수를 인자로 받아 실행하는 함수
const apply1 = f => f(1);
apply1(a => a + 2); // 3
const times = (f, n) => {
let i = -1;
while (++i < n) f(i);
};
times(log, 3); // 0 1 2
함수를 만들어 리턴하는 함수
const addMaker = a => b => a + b;
const add10 = addMaker(10);
add10(5); // 15
add10(10); // 20
addMaker가 리턴한 함수는 클로저로 a의 값을 기억한다. 이 구조가 함수형 프로그래밍의 핵심 도구가 된다.