순수함수란?

nabisorry·2020년 2월 12일
7

JavaScript

목록 보기
9/9

1.순수함수 조건

  • 동일한 인자가 들어갈 경우 항상 같은 값이 나와야 한다.
  • 부수적인 효과가 일어나면 안 된다.
  • return 값으로만 소통한다.
  • 순수함수는 평가 시점이 중요하지 않다.
    만약 순수함수가 아니라면 동일한 인자를 넣어도 다른 값이 나오는 경우 어떠한 시점에서 함수를 평가할지가 굉장히 중요한데 순수함수는 동일한 인자를 넣으면 항상 같은 값이 나오기 때문에 굳이 평가시점을 따질 필요가 없다.

순수함수

function add(a, b) {
        return a + b;
      }

      console.log(add(10, 5));
      console.log(add(10, 5));
      console.log(add(10, 5));

순수함수가 아닌경우

let c = 10;
function add2(a, b) {
  return a + b + c;
}

console.log(add2(5,5)) // 20

c = 15
console.log(add2(5,5)) //25

항상 동일한 인자가 들어가도 c값에 따라서 결괏값이 달라질수 있다.

let c = 20;
function add3(a, b) {
  c = b;
  return a + b;
}
console.log('c: ', c);
console.log(add3(20, 30));
console.log('c: ', c);

부수적인 효과가 일어난다.
부수적인 효과 -> 함수에서 외부의 변수의 값을 변경하거나 들어온 인자의 값을 변화시키는 경우

let obj1 = { val: 10 };
function add4(obj, b) {
  obj.val += b;
}
console.log(obj1.val); //10
add4(obj1, 20);
console.log(obj1.val); //30

return 값도 없고 마찬가지로 외부의 값을 함수 내부에서 변경하는 부수효과가 일어난다.

2.일급함수

함수를 값으로 담을수 있다. 변수에 함수를 값으로 넣을수 있다. 그러므로 인자로 함수를 전달할수도 있다. 원하는 시점에서 함수를 평가(실행)할수 있다.

  • 함수를 값으로 사용할수 있다.
const f1 = function(a) {
  return a * a;
};
console.log(f1); //ƒ (a) { return a * a; }
  • 함수를 인자로 전달 할수도 있다.
const f2 = function() {
	return 5
}
const f1 = function(f) {
	return f()
}
f1(f2) 
  • 함수를 리턴할수도 있다.
function add_maker(a) {
  return function(b) {
    return a + b;
  };
}
let add10 = add_maker(10);
//add10 의 값은 add_maker 리턴함수인 function(b) {return a+b}
//또한 클로저이다. add_maker 에서 인자로 10을 넘겨주고 종료되지만 리턴함수가 10을 기억하고 있다. 
//그래서 결괏값이 30이 나오는것

console.log(add10(20)); //30

let add5 = add_maker(5);
let add15 = add_maker(15);

console.log(add5(10)); //15
console.log(add15(10)); //25

console.log(add10(20)); //30

함수형프로그래밍

profile
쿨럭쿨럭

0개의 댓글