1. 평가와 일급
평가
-
코드
가 계산 되어값
을 만드는 것1 + 2 = 3 [1, 2, ..[3,4]]를 평가 하면 [1,2,3,4]
일급
값
으로 다룰 수 있다변수
에 담을 수 있다.함수의 인자
로 사용 될 수 있다.-
함수의 결과
로 사용 될 수 있다.const a = 10; const add10 = (a) => a + 10; const r = add10(a);
2. 일급 함수
함수
를값
으로 다룰 수 있다.-
조합성과 추상화의 도구 (원하는 시점에 코드를 평가해서 다른 변수에 사용할 수 있음)
const add5 = (a) => a + 5; log(add5); log(add5(5)); const f1 = () => () => 1; log(f1()); const f2 = f1(); log(f2); log(f2());
3. 고차 함수
함수를 값
으로 다루는함수
함수를 인자로 받아서 실행하는 함수
const apply1 = (f) => f(1);
const add2 = (a) => a + 2;
log(apply1(add2)); // 3
log(apply1((a) => a - 1)); // 0
// 함수를 인자로 받고
// 다른 인자 값 n을 받아서
// 실행하는 함수임
// 또는 Applicated Programming이라고 함
const times = (f, n) => {
let i = -1;
while (++i < n) f(i);
};
times(log, 3); // 0,1,2
times((a) => log(a + 10), 3); // 10,11,12
함수를 만들어서 리턴하는 함수
클로저
를 만들어 리턴하는 함수
const addMaker = (a) => (b) => a + b;
// add10 함수가 10을 기억하고 있다는 것이 클로저 의미 임
// 즉 add10 함수는 a를 기억하는 함수임
// 클로저는 b => a + b가 만들어 질 때 a를 계속 기억하고 있다는 뜻임
const add10 = addMaker(10); // b => 10 + b;
log(add10(5)); // 15
log(add10(10)); // 20
4. 느낀점
그냥 코드를 작성하는 행위가 코드 평가라는 사실을 알게되었다. 사실 맨처음에 평가라는 단어에 익숙하지 않았지만 학습하면서 평가라는 단어에 익숙해졌다. 그리고 일급함수의 특징을 고려해 다양한 코드를 작성할 수 있겠다라는 생각이 들었다. 또한 클로저를 하기위해 일급함수를 통해 할 수 있다는 사실을 알게되었다. 아직 많이 생소하지만 그래도 기본을 확실히 다져지는 느낌이다.
참고
유인동님의 함수형 프로그래밍과 JS ES6+ 강의