명령형 프로그래밍은 어떻게 할 것인가(How)를 표현하고, 선언형 프로그래밍은 무엇을 할 것인가(What)를 표현한다.
동일한 입력에는 항상 같은 값을 반환하는 함수
함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 것, 즉 Side Effect 가 없는 함수를 순수함수라고 한다.
// 이렇게 생긴 함수를
function example (num) {
return console.log(num)
}
// 값(변수)으로 할당하는 모습
const example = function (num) {
return console.log(num)
}
// ES6 부터는 화살표 함수를 통해 간결하게 함수를 값으로 할당할 수 있다.
const example = (num) => {
return console.log(num)
}
인자로 다른 함수를 받아 결과값을 보내는 함수
const calculator = (num1, num2, op) => op(num1, num2);
const add = (num1, num2) => num1 + num2;
const multiply = (num1, num2) => num1 * num2;
const power = (num1, num2) => Math.pow(num2, num1);
calculator(1, 2, add); // 3
calculator(1, 2, multiply) // 2
calculator(1, 2, power) // 2
인자를 여러개 받는 함수를 분리하여, 인자를 하나씩만 받는 함수의 체인으로 만드는 방법
// ES5 에서의 커링
function calculator2 (op) {
return function (num) {
return op(2, num)
}
}
// ES6 에서의 커링 (더 간결하게 작성이 가능)
const calculator2 = (op) => (num) => op(2, num);
const add = (num1, num2) => num1 + num2;
const multiply = (num1, num2) => num1 * num2;
const add2 = calculator2(add);
const multiply2 = calculator2(multiply)
add2(3) // 5
multiply2(3) // 6