이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습한 내용을 정리하고 있습니다.
엄격성과 비엄격성은 함수의 한 속성이다.
단축 평가를 하는 && 와 ||, 조건에 따라 구문을 실행하는 if 등을 언어가 기본 지원하는 syntax로 생각할 수 있지만, 이들을 인수의 평가가 생략될 수도 있는 함수라고 생각해도 틀리지 않다.
일반적으로, 표현식의 평가되지 않은 형태를 성크(thunk)라고 부른다. 나중에 그 성크의 표현식을 평가해서 결과를 내도록 강제할 수 있다. 인수 목록이 비어있는 함수를 인자로 받는 예가 그러하다.
const fn: (thunk: () => number): number
thunk는 전달 시점에는 평가가 되지 않으며 함수 내부에서 값이 필요할때 평가를 한다. 경우에 따라서는 평가가 생략 될 수 있다.
스칼라는 이러한 구문에 대한 syntax sugar를 제공한다. thunk: () => number
대신 thunk: => number
라고 지정할 수 있으며, 평가가 필요할때 thunk()
라는 명시적 호출 구문 대신 thunk
라고 표현할 수 있다.
또한 스칼라는 thunk로 전달된 비엄격 매개 변수에 대해서는 기본적으로 결과를 캐싱하지 않지만, lazy val x = thunk
와 같이 lazy키워드를 사용하여 결과를 캐싱하도록 할 수도 있다.