La mayoría de los lenguajes de programación (tanto los que se escriben dinámicamente como los estáticos) tienen palabras clave especiales y / o sintaxis que se ven muy diferentes a las variables de declaración para declarar funciones. Veo funciones tan solo como declarar otra entidad nombrada:
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 coherente (busco en el mismo lugar para entender el tipo de una variable o función) y probablemente hace que el analizador / gramática sea un poco más sencillo de escribir.
Sé que muy pocos idiomas usan esta idea (CoffeeScript, Haskell) pero los lenguajes más comunes tienen una sintaxis especial para las funciones (Java, C ++, Python, JavaScript, C #, PHP, Ruby).
Incluso en Scala, que admite ambas formas (y tiene inferencia de tipo), es más común escribir:
def addOne(x: Int) = x + 1
En lugar de:
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 lenguaje 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 juguete y me pregunto si hay algún inconveniente si diseño mi lenguaje de tal manera y si hay razones históricas o técnicas, ¿este patrón no se sigue ampliamente?