Existe-t-il une convention de dénomination pour les fonctions d'ordre supérieur? Autrement dit, les fonctions qui renvoient d'autres fonctions.
Un exemple 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]
J'ai eu tendance à l'écrire comme ci-dessus: c'est-à-dire, en optimisant la lisibilité au point d'invocation (je lirais les dernières lignes ci-dessus comme "filtrer le tableau pour obtenir les éléments uniquement divisibles par 5"), mais au point de définition plus loin du contexte dans lequel il est utilisé, il n'est pas si facile de comprendre ce que cette fonction fait de son nom.
Réponses:
Non, je ne pense pas que vous ayez besoin d'une convention de dénomination spéciale pour indiquer que vous retournez une fonction. Comme nous pouvons le voir dans les langages où les fonctions sont curry , le retour d'une fonction est essentiellement la même chose que d'avoir une fonction avec plusieurs arguments. par exemple, il y a peu de différence entre
onlyDivisibleBy(3)(6)
etonlyDivisibleBy(3,6)
Je changerais le nom de
onlyDivisibleBy
laisDivisibleBy
bien que je penseis
est une façon plus commune pour indiquer un prédicat etonlyDivisibleBy(3)(6)
semble étrange de retourtrue
étant donné que 6 est clairement divisible par 2la source
Dans les langages fonctionnels fortement typés, il est évident d'après la signature de fonction ce qui est une fonction d'ordre supérieur et ce qui ne l'est pas, donc il n'y a tout simplement pas besoin.
Dans d'autres langues, je n'ai jamais rencontré une telle convention de dénomination et je ne peux pas penser à une qui ne serait pas simplement encombrante. Mieux vaut se concentrer sur les fonctions de nommage bien que de surcharger les noms comme ça, je pense.
la source
Non, et vous ne devez en utiliser aucun.
Pourquoi?
Parce que ce serait une sorte de notation hongroise . L'idée est exactement que les fonctions passées à des fonctions d'ordre supérieur ne sont qu'une sorte de variables. Alors traitez-les comme ça.
la source