¿Existe una convención de nomenclatura para funciones de orden superior? Es decir, funciones que devuelven otras funciones.
Un ejemplo en Javascript:
function onlyDivisibleBy(div) { // <-- higher order function
return function (n) {
return n % div === 0;
}
}
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9]
arr.filter(onlyDivisibleBy(5)); // [0, 5]
He tendido a escribirlo como se indica arriba: es decir, optimizar la legibilidad en el punto de invocación (leería las últimas líneas de arriba como "filtrar la matriz para obtener elementos solo divisibles por 5"), sin embargo, en el punto de definición desde el contexto en el que se usa, no es tan fácil entender lo que hace esta función desde su nombre.
Respuestas:
No, no creo que necesite una convención de nomenclatura especial para indicar que está devolviendo una función. Como podemos ver en los lenguajes en los que las funciones tienen currículum , devolver una función es esencialmente lo mismo que tener una función con múltiples argumentos. por ejemplo, hay poca diferencia entre
onlyDivisibleBy(3)(6)
yonlyDivisibleBy(3,6)
Sin embargo, cambiaría el nombre de
onlyDivisibleBy
a,isDivisibleBy
ya que creo queis
es una forma más común de indicar un predicado yonlyDivisibleBy(3)(6)
parece extraño regresartrue
dado que 6 claramente también es divisible por 2fuente
En lenguajes funcionales fuertemente tipados, es evidente a partir de la firma de la función qué es una función de orden superior y qué no lo es, por lo que simplemente no hay necesidad.
En otros idiomas, nunca me he encontrado con una convención de nombres así y no puedo pensar en una que no sea simplemente engorrosa. Creo que es mejor concentrarse en las funciones de nombres que sobrecargar los nombres así.
fuente
No, y no debes usar ninguno.
¿Por qué?
Porque eso sería una especie de notación húngara . La idea es exactamente que las funciones pasadas a funciones de orden superior son solo un tipo de variables. Así que trátalos así.
fuente