함수형 프로그래밍
함수형 프로그래밍은 성공적인 프로그래밍을 위해 부수효과를 미워하고, 조합성을 강조하는 프로그래밍 패러다임이다.
순수함수
function add(a, b) {
return a + b;
}
var c = 10;
function add2(a, b) {
return a + b + c;
}
console.log( add2(10, 20) ); // 40
c = 20;
console.log( add2(10, 20) ); // 50
var c = 20;
function add3(a, b) {
c = b;
return a + b;
}
console.log(c); // 20
add3(20, 30);
console.log(c); // 30
var obj1 = { val: 10 };
function add4(obj, b) {
obj.val += b;
}
console.log(obj1.val); // 10
add4(obj1, 20);
console.log(obj1.val); // 30
//obj1이라는 외부 객체에 직접 접근하여 값에 영향을 주기 때문에 순수함수라고 할 수 없다.
var obj1 = { val: 10 };
function add5(obj, b) {
return { val: obj.val + b };
}
console.log(obj1.val); // 10
var obj2 = add5(obj1, 20);
console.log(obj1.val); // 10
console.log(obj2.val); // 30
//외부 객체의 값을 직접 영향을 주지 않기 때문에 순수함수다.
순수함수의 중요한 특징: 평가 시점이 중요하지 않다.(함수형 프로그래밍이 가능한 이유)
일급함수
1.변수에 함수를 담을 수 있는 개념
var f1 = function(a) { return a * a };
console.log(f1);
function f3(f) {
return f();
}
console.log(f3(function() { return 10; })); // 10
함수형 프로그래밍 : 언제 평가해도 상관없는 순수함수들을 만들고, 그순수함수들을 값으로 들고 다니면서 적절한 시점마다 평가를 하는 방식으로 프로그래밍 하는 것
순수함수와 일급함수를 이용한 add_maker 함수 만들기.
/* add_maker */
function add_maker(a) {
return function(b) {
return a + b;
}
}
var add10 = add_maker(10);
console.log(add10(20)); // 30
add_maker()를 실행하면서 10을 인자로 넘김.
리턴된 함수가 add10에 담기게 됨.(일급함수 개념)