TIL 11 | 평가와 일급

grighth12·2021년 8월 11일
1

TIL

목록 보기
11/15
post-thumbnail

와! 드디어 함수형 프로그래밍 TIL을 쓸 수 있다!

평가

  • 코드가 계산(Evaluation) 되어 값을 만드는 것
  • 예를 들어 ( 1 + 2 ) + 4 면, (1 + 2)가 먼저 평가되어 3이 되고, 3+4가 평가되어 7이 된다.

일급

  • 값으로 다룰 수 있다.
  • 변수에 담을 수 있다.
  • 함수의 인자로 사용 될 수 있다.
  • 함수의 결과로 사용 될 수 있다.

아래 코드의 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

고차 함수

  • 함수를 값으로 다루는 함수이다.
    1. 함수를 인자로 받아서 실행하는 함수
    2. 함수를 리턴하는 함수(클로저를 리턴하는 함수)

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

  • 예제 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
  • 예제 2
  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

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

  • 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 [강의] 일급과 평가
profile
데굴데굴 굴러가고 있습니다

0개의 댓글