대부분의 프로그래밍 언어 (동적 및 정적 유형의 언어 모두)에는 함수 선언을위한 변수 선언과 크게 다른 특수 키워드 및 / 또는 구문이 있습니다. 다른 명명 된 엔티티를 선언하는 것처럼 함수를 봅니다.
예를 들어 파이썬에서 :
x = 2
y = addOne(x)
def addOne(number):
return number + 1
왜 안되 겠어요 :
x = 2
y = addOne(x)
addOne = (number) =>
return number + 1
마찬가지로 Java와 같은 언어로 :
int x = 2;
int y = addOne(x);
int addOne(int x) {
return x + 1;
}
왜 안되 겠어요 :
int x = 2;
int y = addOne(x);
(int => int) addOne = (x) => {
return x + 1;
}
이 구문은 무언가 (함수 또는 변수)와 일부 언어에서 def
또는 키워드와 같이 키워드를 선언하는보다 자연스러운 방법으로 보입니다 function
. 그리고 IMO는 더 일관성이 있으며 (변수 또는 함수의 유형을 이해하기 위해 같은 장소를 찾습니다) 아마도 구문 분석기 / 문법을 조금 더 작성하기가 더 쉽습니다.
이 아이디어를 사용하는 언어는 거의 없지만 (CoffeeScript, Haskell) 가장 일반적인 언어에는 함수 (Java, C ++, Python, JavaScript, C #, PHP, Ruby)에 대한 특수 구문이 있습니다.
스칼라에서도 두 가지 방식을 모두 지원하고 형식 유추가 가능합니다.
def addOne(x: Int) = x + 1
오히려 :
val addOne = (x: Int) => x + 1
스칼라에서 적어도 IMO는 아마도 가장 이해하기 쉬운 버전이지만이 관용구는 거의 따르지 않습니다.
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
나는 내 장난감 언어로 일하고 있는데 그런 방식으로 언어를 디자인 할 때 어떤 함정이 있는지, 그리고 역사적 또는 기술적 이유가 있다면이 패턴이 널리 따르지 않는지 궁금합니다.
(int => int) addOne = (x) => {
보다 훨씬 더 "특별하고"복잡한 것입니다 int addOne(int) {
.