[functional-js] 일급함수 고차함수

younoah·2021년 1월 25일
1

[functional-js]

목록 보기
1/16

이 글은 유인동님의 함수형 프로그래밍 강의 내용을 정리한 글입니다.

평가

코드가 계산되어 값을 만드는 것

1 + 2 // 3으로 평가된다.
[1,2 + 3] // [1, 5]로 평가된다.

일급

  • 값으로 다룰 수 있다.
  • 변수에 담을 수 있다.
  • 함수의 인자로 사용될 수 있다.
  • 함수의 결과로 사용될 수 있다.
const a = 10; // 변수에 담을 수 있다.
const add = a => a + 10; // 함수의 인자로 사용될 수 있다.
const r = add10(a); // 함수의 결과로 사용될 수 있다.

일급함수

  • 함수를 값으로 다룰 수 있다.
  • 함수가 일급이 때문에 조합성과 추상화의 도구로 함수를 잘 사용할 수 있다.
const add5 = a => a + 5; // 함수
log(add5); // 함수의 인자로 함수로 사용할 수 있다.
log(add5(5)); // 함수의 결과를 다른 함수에 전달할 수 있다.

const f1 = () => () => 1; // 함수의 결과를 함수로 할 수 있다.
log(f()); 

const f2 = f1(); // 다른 변수에 함수를 담을 수 있다.
log(f2);
log(f2());

고차함수

함수를 값으로 다루는 함수

고차함수는 아래 2가지 유형으로 나뉜다.

1. 함수를 인자로 받아서 실행하는 함수

// ex1
const apply1 = f => f(1);
const add2 = a => a + 2;
log(apply(add2));
// apply1은 add2라는 함수를 인자로 받아서 실행한다.

// ex2
const times = (f, n) => {
    let i = -1;
    while (++i < n) f(i);
};
times(log, 3);

2. 함수를 만들어 리턴하는 함수 (클로저를 만들어 리턴하는 함수)

const addMaker = a => b => a + b;
const add10 = addMaker(10);
log(add10(10)); // 10 

b => a + b 가 클로저가 된다.
리턴하는 함수는 a를 기억하고 있다.

클로저란?

외부함수와 외부함수 안에 내부함수가 있다고하자.

그리고 내부함수가 외부함수의 변수를 사용하고 있다고 하자.

내부함수가 외부함수의 변수를 기억하고 있는 상태 와 내부함수 자체를 함께 통칭해서 말하는 용어이다.

함수가 함수를 만들어서 리턴하면 결국 클로저를 만들어서 리턴한다.

profile
console.log(noah(🍕 , 🍺)); // true

0개의 댓글