Higher-order function
은 Kotlin을 배우면서 마주친 개념이었다. 사실 higher-order function 자체는 이전에 내가 배웠던 다른 언어에서도 사용되던 개념이었는데, Kotlin 이전까지는 이에 대해 따로 설명을 하던 튜토리얼이 없었어서 Kotlin에서 처음으로 알게 되었다. Higher-order function은 고차함수
, 또는 고계함수
로 번역하며, 아래 두가지 중 하나 이상을 만족하는 함수를 의미한다.
- 함수를 파라미터로 전달받는 함수
- 함수를 리턴하는 함수
정의 자체가 그리 어렵지 않다. 그리고 함수가 값으로서 평가되기만 하면 사용할 수 있는 개념이라 일급 객체로서의 함수가 지원되는 언어는 higher-order function이 가능하다. 따라서 웬만한 프로그래밍 언어들에서 어렵지 않게 마주칠 수 있다. 아래는 Python의 예다.
위의 sum
함수는 덧셈 연산의 피연산자 a, b와 결과를 전달받을 함수인 callback
을 인자로 받는다. 함수를 파라미터로 전달받으므로, 위 함수는 higher-order function이다.
위는 파이썬 데코레이터의 기본형이다. timeit
함수는 인자로 함수를 받고, wrapper
함수를 반환한다. 두 조건을 모두 만족하므로, 당연히 이도 higher-order function이다.
JavaScript도 함수가 값이기 때문에, higher-order function을 표현할 수 있다.
'프로그래밍 > 언어론과 비슷한' 카테고리의 다른 글
Currying (0) | 2019.02.08 |
---|---|
Memoization (0) | 2018.09.11 |