La maggior parte dei linguaggi di programmazione (sia linguaggi tipizzati dinamicamente che staticamente) ha una parola chiave e / o una sintassi speciali che sembrano molto diverse rispetto alla dichiarazione delle variabili per la dichiarazione delle funzioni. Vedo le funzioni proprio come dichiarare un'altra entità con nome:
Ad esempio in Python:
x = 2
y = addOne(x)
def addOne(number):
return number + 1
Perché no:
x = 2
y = addOne(x)
addOne = (number) =>
return number + 1
Allo stesso modo, in una lingua come Java:
int x = 2;
int y = addOne(x);
int addOne(int x) {
return x + 1;
}
Perché no:
int x = 2;
int y = addOne(x);
(int => int) addOne = (x) => {
return x + 1;
}
Questa sintassi sembra un modo più naturale di dichiarare qualcosa (sia una funzione o una variabile) che una parola chiave in meno come def
o function
in alcune lingue. E, IMO, è più coerente (guardo nello stesso posto per capire il tipo di una variabile o funzione) e probabilmente rende il parser / grammatica un po 'più semplice da scrivere.
So che pochissime lingue usano questa idea (CoffeeScript, Haskell) ma i linguaggi più comuni hanno una sintassi speciale per le funzioni (Java, C ++, Python, JavaScript, C #, PHP, Ruby).
Anche in Scala, che supporta entrambi i modi (e ha un'inferenza di tipo), è più comune scrivere:
def addOne(x: Int) = x + 1
Piuttosto che:
val addOne = (x: Int) => x + 1
IMO, almeno in Scala, questa è probabilmente la versione più facilmente comprensibile ma questo idioma viene raramente seguito:
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
Sto lavorando sul mio linguaggio giocattolo e mi sto chiedendo se ci sono delle insidie se disegno la mia lingua in questo modo e se ci sono motivi storici o tecnici questo schema non è ampiamente seguito?