함수형 프로그래밍과 JavaScript ES6+ 1. 함수형 자바스크립트 기본기
02 Mar 2020 | javascript functional-programming ES6inflearn의 함수형 프로그래밍과 JavaScript ES6+를 보고 공부한 것을 정리합니다.
평가
- 코드가 계산(Evaluation) 되어 값을 만드는 것
일급
- 값으로 다룰 수 있다.
- 변수에 담을 수 있다.
- 함수의 인자로 사용될 수 있다.
- 함수의 결과로 사용될 수 있다.
const a = 10; // 함수를 값을 담음
const add10 = a => a + 10; // 변수에 함수를 담음
const r = add10(a); // 함수의 결과로 사용됨
log(r); // 함수의 인자로 사용됨
일급 함수
- 자바스크립트에서 함수는 일급
- 함수를 값으로 다룰 수 있다는 뜻
const add5 = a => a + 5; // 함수를 값으로 다루어 담음
log(add5); // 함수에게 전달하여 출력 가능 : a => a + 5 가 출력됨
log(add5(5)); // 함수의 결과로 만들어 출력될 수 있음 : 10이 출력됨
const f1 = () => () => 1; // 함수의 결과값으로 함수가 사용될 수 있음
// f1이라는 함수는 실행되었을 때 다시 함수를 리턴할 수 있음
log(f1()); // () => 1 이 출력됨. 즉 실행 결과가 함수인 것.
const f2 = f1(); // 다시 실행 결과를 f2라는 변수에 담음
log(f2); // () => 1 이 출력됨.
log(f2()); // 담겨진 함수를 내가 원하는 시점에 평가하여 결과를 만들 수 있다.
자바스크립트에서 함수가 1급이다. -> 조합성과 추상화의 도구로 함수를 사용할 수 있음!
고차 함수
- 함수를 값으로 다루는 함수
- 크게 두 가지
- 함수를 인자로 받아서 실행하는 함수
- 함수를 만들어 리턴하는 함수 (클로저를 만들어 리턴하는 함수)
함수를 인자로 받아서 실행하는 함수
const apply1 = f => f(1); // 함수를 받아서 함수에 1을 적용하는 함수
const add2 = a => a+2;
log(apply1(add2)); // 3으로 평가됨
log(apply1(a => a - 1)); // 0으로 평가됨
함수를 인자값으로 다루고 있기 때문에 apply1은 고차 함수
const times = (f, n) => { // 함수 f와 숫자 n을 받아서 n만큼 함수 f를 실행하는 함수
// 실행하면서 몇 번째 실행되는 중인지도 전달하도록 만들어봄
let i = -1;
while (++i < n) f(i);
}
times(log, 3); // 3번 실행됨 : 0, 1, 2
times(a => log(a + 10), 3); // 10, 11, 12
함수를 값으로 받아서 또 다른 값을 받아 안에서 실행하면서 자신이 원하는 인자를 적용하는 함수 -> applicative programming
함수를 만들어 리턴하는 함수 (클로저를 만들어 리턴하는 함수)
const addMaker = a => b => a + b;
const add10 = addMaker(10); // b =? b + 10이 저장되어 있음
log(add10(5)); // 15
log(add10(10)); // 20
- 클로저 : 이 함수가 a를 계속해서 기억하고 있다는 뜻
- 이 함수는 함수이자 a를 기억하는 클로저
- 클로저 : add10이라는 함수가 만들어질 때의 환경인 a(10)와 b => a + b를 통칭해서 말하는 용어
- addMaker는 클로저를 리턴하는 함수이고,
- 함수가 함수를 만들어서 리턴할 때는 결국은 클로저를 만들어서 리턴하기 위해 사용한다.
Comments