[JavaScript] 함수형 프로그래밍 (1) - '평가'와 '일급'

SOLEE_DEV·2021년 1월 30일
1

Javascript

목록 보기
4/19
post-thumbnail

1. 평가와 일급

자바스크립트에서는 함수가 '일급'이다.
'일급'이라는 얘기는 함수를 값으로써 다룰 수 있다는 얘기다.

평가

  • 코드가 계산되어 값을 만드는 것
[1,2+3]
=== [1,5]

[1,2,[3,4]]
=== (3) [1, 2, Array(2)]

일급

  • 으로 다룰 수 있다.
  • 변수에 담을 수 있다. (함수를 변수에 담을 수 O)
  • 함수의 인자로 사용될 수 있다. (Parameter)
  • 함수의 결과로 사용될 수 있다. (return 값으로 함수가 올 수 있다!)

일급 함수

  • 함수를 값으로 다룰 수 있다.
  • 조합성추상화의 도구
const f1 = () => () => 1;
// 1. 함수의 return 값으로 함수가 올 수 있다.

const f2 = f1();

console.log(f2); 
//함수의 파라미터 값으로 함수를 넣어줄 수 있다.

console.log(f2());
// 이렇게 함수의 파라미터로 함수의 return값을 넘겨주면
// 함수를 원하는 시점에 실행해서 평가할 수도 있음

== 함수형 프로그래밍은 '일급 함수'의 성질을 가지며 이 성질을 활용하면 많은 조합성을 만들어내고 추상화의 좋은 도구로써 사용할 수 있음

고차 함수

  • 일급 함수 : 함수가 값으로 다뤄질 수 있다.
  • 고차 함수 : 이러한 '일급 함수'의 성질을 이용해서 함수를 값으로 다루는 함수
    1) 함수로 인자로 받아서 안에서 실행해주는 함수
    2) 함수를 만들어서 리턴하는 함수 (클로저)

1) 함수를 인자로 받아서 안에서 실행해주는 함수

const apply = f => f(1);
// 함수가 함수의 인자로써 '함수'를 받아서 안에서 실행
const add2 = a => a+2;
console.log(apply(add2)); // 결과값 3
// === (a=> a+2) => (a=> a+2)(1);

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

times(console.log,3);
times(a=>console.log(a+10),3);
// 이러한 프로그래밍 기법을 Applicative 프로그래밍이라고 한다.

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

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

console.log(add10(5));

이 때 클로저처음 만들어졌을 때의 상태인 a의 값(12)을 기억하고 있다는 뜻
함수이자 a를 기억하는 클로저 (만들어졌을 때의 환경, 함수의 객체를 통칭해서 말하는 용어!)
함수가 함수를 만들어서 return 하는 경우는 클로저를 만들기 위함!

profile
Front-End Developer

0개의 댓글