함수형 프로그래밍(평가,일급,고차함수)

평가와 일급 그리고 고차 함수

  • 평가

평가랑 코드가 계산( Evaluation ) 되어 값을 만드는 것

> (1 + 2) + 3
> 6 //1+2가 먼저 평가되고 3+3이 평가되어 6을 만들었다.
> [1, 2]
> (2) [1, 2] // 배열로 평가됨
  • 일급
  • 값으로 다룰 수 있다.
  • 변수에 담을 수 있다.
  • 함수의 인자로 사용될 수 있다.
  • 함수의 결과로 사용될 수 있다.
const a = 10 //값으로 다룰 수 있다. 변수에 담을 수 있다.
const add10 = a => a + 10 // 함수의 인자로 사용될 수 있다.
const r = add10(a) // 함수의 결과로 사용될 수 있다.
log(r) // 20

함수의 일급

  • 함수를 값으로 다룰 수 있다.
  • 조합성과 추상화의 도구( 위 4가지 특성 생각 )
const log = console.log

const add5 = a => a + 5 // add5라는 변수에 a=>a+5 라는 함수를 값으로 전달
log(add5) // 함수의 인자로 함수가 사용 가능
log(add(5)) // 함수는 평가에서 값으로 만들어져 다른 함수( 여기서는 log )에 전달 될 수 있다.

const f1 = () => () => 5 // 함수의 결과로 함수를 사용 가능하다.
log(f1()) // () =>5
const f2 = f1() 
log(f2()) //5

고차 함수

함수를 값으로 다루는 함수

  • Case 1) 함수를 인자로 받아서 실행하는 함수
const apply1 = f => f(1)
const add2 = a => a+2
log(apply1(add2)) // 3으로 평가
log(apply1(a => a-1)) // 0으로 평가

const times = (f, n) => { // 함수를 인자로 받아서 n 번 실행하는 함수
  let i = -1
  while(++i < n) f(i)
}

times(log, 3) // 0, 1, 2
times( a => log(a+10), 3) // 10, 11, 12
  • Case 2) 함수를 만들어 리턴하는 함수 ( 클로저를 만들어 리턴하는 함수 )
const addMaker = a => b => a+b
// 여기서 클로저란 b => a+b 라는 함수가 a를 계속해서 기억하고 있다는 뜻
// 즉, b => a+b는 함수이자 a를 기억하는 클로저 이다.
const add = addMaker(10) // addMaker는 함수를 리턴하는 함수
log(add(5)) // 15
log(add(10)) // 20

Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook