와! 드디어 함수형 프로그래밍 TIL을 쓸 수 있다!
아래 코드의 a
는 일급니다.
const a = 10;
const add10 = (a) => a + 10;
const r = add10(a); // a는 함수의 인자와 결과로 사용될 수 있다.
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(); // () => 1
console.log(f2); // () => 1
console.log(f2()); // 1
const apply1 = (f) => f(1); // 함수를 인자로 받아서 1을 넘겨 호출하는 함수
const add2 = (a) => a + 2;
//apply1은 add2를 인자로 받아서 add2(1)의 실행 값을 반환한다.
console.log(apply1(add2)); // 3
console.log(apply1((a) => a - 1)); //0
const times = (f, n) => {
let i = -1;
while (++i < n) f(i);
};
times(console.log, 3); // 0 1 2
times((a) => console.log(a + 10), 3); // 10 11 12
addMaker
const addMaker = (a) => (b) => a + b;
// 10을 더하는 add10 함수(클로저)를 반환
// a => (b => a+b;)
// b => 10 + b;
const add10 = addMaker(10); // b => 10 + b
// 클로저를 만든다
// add10은 a를 기억하고 있다.
// add10은 함수이자 a를 기억하는 클로저
// 클로저는 함수를 만들어질때 환경인 a와 함수 자체의 객체를 통칭하는 용어
console.log(add10(10)); // 20
이를 applicative programming이라고도 한다.
강의 노트랑 TIL을 구분해야 할 지 고민이다... 모르는 것만 쓰자고 했는데 다 모르는 거임ㅎㅎ 새롭게 보는 용어에 쫄지말자고 다짐했다. 일급, 일급 함수, 고차 함수 모두 낯설기는 하지만 이해하기 어려운 용어는 아니었다.
프로그래머스 데브코스 프론트엔드 Day6 [강의] 일급과 평가