[JavaScript] 함수형 프로그래밍
# 평가
- 코드가 계산되어 값으로 만들어지는 것
# 일급
- 값으로 다룰 수 있다.
- 변수에 담을 수 있다.
- 함수의 인자로 사용될 수 있다.
- 함수의 결과로 반환될 수 있다.
# 일급 함수
- 함수를 값으로 다룰 수 있다.
- 조합과 추상화의 도구
자바스크립트에서 함수는 일급이다. 변수에 함수를 값으로 담을 수 있고, 함수의 인자로 함수를 전달 할 수 있다. 또 함수를 평가해서 값으로 다른 함수에도 전달 할 수 있다.
const add5 = a => a + 5;
console.log(add5); // a => a + 5
console.log(add5(5)); // 10
const f1 = () => () => 1;
console.log(f1()); // () => 1
const f2 = f1();
console.log(f2); // () => 1
console.log(f2()); // 1
# 고차 함수
- 함수를 값으로 다루는 함수
고차함수는 두가지로 나눠진다.
## 함수를 인자로 받아서 실행하는 함수
const apply1 = f => f(1);
const add2 = a => a + 2;
console.log(apply1(add2)); // 3 -> (a => a + 2)(1);
console.log(apply1(a => a - 1)); // 0
const times = (f, n) => {
let i = -1;
while(++i) f(i);
}
times(console.log, 3); // 0 1 2
times(a => console.log(a + 10), 3); // 10 11 12
함수를 인자로 받고 받은 인자를 가지고 내부적인 동작을 실행하며 원하는 인자를 적용하는 함수이다.
## 함수를 만들어 리턴하는 함수 (클로저를 만들어 리턴하는 함수)
const addMaker = a => b => a + b;
const add10 = addMaker(10);
console.log(add10); // b => a + b;
console.log(add10(5)); // 15
console.log(add10(10)); // 20
addMaker 함수는 함수를 리턴하는 함수이며, 클로저를 만들어 리턴한다. b => a + b 함수는 함수이자 a를 기억하는 클로저이다. 그러므로 addMaker는 클로저를 리턴하는 함수이고 함수가 함수를 만들어서 리턴할 때는 결국엔 클로저를 만들어서 리턴하는 방식으로 사용한다.
'JavaScript' 카테고리의 다른 글
[JavaScript] 함수형 프로그래밍 (제너레이터, 이터레이터) (0) | 2022.03.31 |
---|---|
[JavaScript] 함수형 프로그래밍 (이터러블, 이터레이터) (0) | 2022.03.30 |
[JavaScript] ES6 chap.3 (0) | 2021.12.02 |
[JavaScript] ES6 chap.2 (0) | 2021.11.30 |
[JavaScript] ES6 chap.1 (0) | 2021.11.29 |