Gibt es eine Namenskonvention für Funktionen höherer Ordnung? Das heißt, Funktionen, die andere Funktionen zurückgeben.
Ein Beispiel in 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]
Ich neige dazu, es wie oben zu schreiben: das heißt, die Lesbarkeit am Aufrufpunkt zu optimieren (ich habe die letzten Zeilen oben als "das Array filtern, um Elemente zu erhalten, die nur durch 5 teilbar sind" gelesen), jedoch am Definitionspunkt entfernt Aus dem Kontext, in dem es verwendet wird, ist es nicht so einfach zu verstehen, was diese Funktion aus ihrem Namen macht.
Antworten:
Nein, ich glaube nicht, dass Sie eine spezielle Namenskonvention benötigen, um anzuzeigen, dass Sie eine Funktion zurückgeben. Wie wir aus Sprachen sehen können , wo Funktionen sind curried , ist eine Funktion der Rückkehr im Wesentlichen die gleiche wie eine Funktion mit mehreren Argumenten haben. ZB gibt es kaum einen Unterschied zwischen
onlyDivisibleBy(3)(6)
undonlyDivisibleBy(3,6)
Ich würde den Namen von
onlyDivisibleBy
in ändern ,isDivisibleBy
da ich denke, dass diesis
ein gängigerer Weg ist, um ein Prädikat anzuzeigen, undonlyDivisibleBy(3)(6)
es seltsam erscheint , wenn man bedenkt,true
dass 6 auch eindeutig durch 2 teilbar istquelle
In stark typisierten funktionalen Sprachen ist aus der Funktionssignatur ersichtlich, was eine Funktion höherer Ordnung ist und was nicht, so dass einfach keine Notwendigkeit besteht.
In anderen Sprachen bin ich noch nie auf eine solche Namenskonvention gestoßen, und ich kann mir keine vorstellen, die nicht einfach nur umständlich wäre. Ich denke, es ist besser, sich auf die Benennungsfunktionen zu konzentrieren, als die Namen so zu überladen.
quelle
Nein, und Sie sollten keine verwenden.
Warum?
Denn das wäre eine Art ungarische Notation . Die Idee ist genau, dass Funktionen, die an Funktionen höherer Ordnung übergeben werden, nur eine Art von Variablen sind. Behandle sie also so.
quelle