Die meisten Programmiersprachen (sowohl dynamisch als auch statisch typisierte Sprachen) haben spezielle Schlüsselwörter und / oder Syntax, die sich stark von der Deklaration von Variablen zum Deklarieren von Funktionen unterscheiden. Ich sehe Funktionen so, als würde man eine andere benannte Entität deklarieren:
Zum Beispiel in Python:
x = 2
y = addOne(x)
def addOne(number):
return number + 1
Warum nicht:
x = 2
y = addOne(x)
addOne = (number) =>
return number + 1
Ebenso in einer Sprache wie Java:
int x = 2;
int y = addOne(x);
int addOne(int x) {
return x + 1;
}
Warum nicht:
int x = 2;
int y = addOne(x);
(int => int) addOne = (x) => {
return x + 1;
}
Diese Syntax scheint natürlicher zu sein, um etwas zu deklarieren (sei es eine Funktion oder eine Variable) und ein Schlüsselwort weniger wie def
oder function
in einigen Sprachen. Und, IMO, es ist konsistenter (ich schaue an der gleichen Stelle, um den Typ einer Variablen oder Funktion zu verstehen) und macht es wahrscheinlich ein bisschen einfacher, die Parser / Grammatik zu schreiben.
Ich weiß, dass nur sehr wenige Sprachen diese Idee verwenden (CoffeeScript, Haskell), aber die meisten gängigen Sprachen haben eine spezielle Syntax für Funktionen (Java, C ++, Python, JavaScript, C #, PHP, Ruby).
Sogar in Scala, das beide Möglichkeiten unterstützt (und Typinferenz hat), ist es üblicher zu schreiben:
def addOne(x: Int) = x + 1
Eher, als:
val addOne = (x: Int) => x + 1
IMO, zumindest in Scala, dies ist wahrscheinlich die am leichtesten verständliche Version, aber diese Redewendung wird selten befolgt:
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
Ich arbeite an meiner eigenen Spielzeugsprache und frage mich, ob es irgendwelche Fallstricke gibt, wenn ich meine Sprache so gestalte und wenn es historische oder technische Gründe gibt, denen dieses Muster nicht weitestgehend folgt.
(int => int) addOne = (x) => {
ist es viel "spezieller" und "komplexer" als int addOne(int) {
...