La mayoría de los lenguajes de programación (lenguajes de tipo dinámico y estático) tienen palabras clave y / o sintaxis especiales que se ven muy diferentes a las variables de declaración para funciones de declaración. Veo funciones tan solo como declarar otra entidad con nombre:
Por ejemplo en Python:
x = 2
y = addOne(x)
def addOne(number):
return number + 1
Por qué no:
x = 2
y = addOne(x)
addOne = (number) =>
return number + 1
Del mismo modo, en un lenguaje como Java:
int x = 2;
int y = addOne(x);
int addOne(int x) {
return x + 1;
}
Por qué no:
int x = 2;
int y = addOne(x);
(int => int) addOne = (x) => {
return x + 1;
}
Esta sintaxis parece una forma más natural de declarar algo (ya sea una función o una variable) y una palabra clave menos como def
o function
en algunos idiomas. Y, en mi opinión, es más consistente (busco en el mismo lugar para comprender el tipo de una variable o función) y probablemente hace que el analizador / gramática sea un poco más simple de escribir.
Sé que muy pocos lenguajes utilizan esta idea (CoffeeScript, Haskell) pero los lenguajes más comunes tienen una sintaxis especial para funciones (Java, C ++, Python, JavaScript, C #, PHP, Ruby).
Incluso en Scala, que admite ambas formas (y tiene inferencia de tipos), es más común escribir:
def addOne(x: Int) = x + 1
Más bien que:
val addOne = (x: Int) => x + 1
OMI, al menos en Scala, esta es probablemente la versión más fácil de entender, pero este modismo rara vez se sigue:
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
Estoy trabajando en mi propio lenguaje de juguetes y me pregunto si hay algún inconveniente si diseño mi lenguaje de tal manera y si hay alguna razón histórica o técnica por la que este patrón no se sigue ampliamente.
(int => int) addOne = (x) => {
es mucho más "especial" y "complejo" que int addOne(int) {
...