1급 시민 / 1급 객체 / 1급 함수
First class citizen
First class citizen 의 특징은 다음과 같다. ref. 1 에 보면 ’Robin Popplestone’이 제안한 정의다.
- 모든 items 들은 function의 실질적인 parameters 이 될 수 있다.
- 모든 items 들은 function 의 결과로 return 될 수 있다.
- 모든 items 들은 할당문(assignment statement) 의 subject 가 될 수 있다. (변수등에 저장할 수 있다.)
- 모든 items 들은 같은지 여부(equality) 를 테스트할 수 있다.
대체로 모든 언어에서 간단한 스칼라 data type 들은 거의 대부분 first-class 이다.(예를 들면, integer, float 등등)
만약 ‘이 언어가 first-class function 을 갖고 있다’ 고 이야기한다면, 그것은 그 언어의 function 이 first-class citizen 의 특징을 가졌다는 이야기이다.
간단한 예
간단히 예를 들면, java 옛버전 에서는 함수를 parameter 로 넘기지 못한다.(JDK8 이후 가능하다.) 그래서 java 에서는 function 이 first-class citizen 이 아니다.
- 함수를 인자(함수 parameter) 를 갖거나
- 함수를 return 해준다.
그래서 higher-order function 을 만드려면, function 이 first-class citizen 이 돼야 한다.
댓글 없음:
댓글 쓰기