大多数编程语言(动态和静态类型的语言)都具有特殊的关键字和/或语法,这些关键字和/或语法与用于函数声明的变量大不相同。我认为函数就像声明另一个命名实体一样:
例如在Python中:
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)都有特殊的语法。
即使在同时支持两种方式(并具有类型推断)的Scala中,也更常见的是编写:
def addOne(x: Int) = x + 1
而不是:
val addOne = (x: Int) => x + 1
IMO,至少在Scala中,这可能是最容易理解的版本,但是很少遵循以下惯用法:
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
我正在开发自己的玩具语言,我想知道如果我以这种方式设计语言是否有任何陷阱,并且是否有任何历史或技术原因未广泛遵循这种模式?
(int => int) addOne = (x) => {
来说,比int addOne(int) {
…… 更“特殊”和“复杂”