¿Convención de nomenclatura para funciones de orden superior? [cerrado]

12

¿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 anteriormente: es decir, optimizando la legibilidad en el punto de invocación (leí las últimas líneas arriba como "filtrar la matriz para obtener elementos solo divisibles por 5"), sin embargo El punto de definición está alejado del contexto en el que se usa, no es tan fácil entender qué hace esta función con su nombre.

    
pregunta nickf 20.11.2013 - 18:28

3 respuestas

14

No, no creo que necesite una convención de nomenclatura especial para indicar que está devolviendo una función. Como podemos ver en lenguajes donde las funciones están curried , devolver una función es esencialmente lo mismo que tener una función con múltiples argumentos. p.ej. hay poca diferencia entre onlyDivisibleBy(3)(6) y onlyDivisibleBy(3,6)

Cambiaría el nombre de onlyDivisibleBy a isDivisibleBy , aunque, como creo, is es una forma más común de indicar un predicado y onlyDivisibleBy(3)(6) parece extraño para devolver true dado que 6 claramente también es divisible por 2

    
respondido por el jk. 20.11.2013 - 18:53
5

En los lenguajes funcionales fuertemente tipados, es obvio por la firma de la función lo que es una función de orden superior y lo que no lo es, por lo que simplemente no hay necesidad.

En otros idiomas, nunca me he topado con una convención de nomenclatura de este tipo y no puedo pensar en una que no sea sencillamente incómoda. Es mejor concentrarse en nombrar las funciones bien que sobrecargar los nombres así, creo.

    
respondido por el itsbruce 20.11.2013 - 18:46
4

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 las funciones de orden superior son solo un tipo de variables. Así que trátalos así.

    
respondido por el Wilbert 20.11.2013 - 18:49

Lea otras preguntas en las etiquetas