Czy istnieje konwencja nazewnictwa dla funkcji wyższego rzędu? Oznacza to, że funkcje zwracają inne funkcje.
Przykład w 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]
Zazwyczaj pisałem to tak jak powyżej: to znaczy optymalizując czytelność w punkcie wywołania (przeczytałem ostatnie linie powyżej jako „przefiltruj tablicę, aby uzyskać elementy podzielne tylko przez 5”), jednak w punkcie definicji dalej z kontekstu, w jakim jest używana, nie jest łatwo zrozumieć, co robi ta funkcja na podstawie jej nazwy.
Odpowiedzi:
Nie, nie sądzę, że potrzebujesz specjalnej konwencji nazewnictwa, aby wskazać, że zwracasz funkcję. Jak widać z języków, w których funkcje są curry , zwracanie funkcji jest w zasadzie takie samo jak posiadanie funkcji z wieloma argumentami. np. jest niewielka różnica między
onlyDivisibleBy(3)(6)
ionlyDivisibleBy(3,6)
Zmieniłbym nazwę z
onlyDivisibleBy
naisDivisibleBy
chociaż, ponieważ uważam, żeis
jest to bardziej powszechny sposób wskazywania predykatu ionlyDivisibleBy(3)(6)
wydaje się dziwny do powrotu,true
biorąc pod uwagę, że 6 wyraźnie można podzielić przez 2źródło
W silnie typowanych językach funkcjonalnych z sygnatury funkcji wynika, co jest funkcją wyższego rzędu, a co nie, więc po prostu nie ma takiej potrzeby.
W innych językach nigdy nie spotkałem się z taką konwencją nazewnictwa i nie mogę wymyślić takiej, która nie byłaby po prostu uciążliwa. Myślę, że lepiej skoncentrować się na funkcjach nazewnictwa, niż przeciążać takie nazwy.
źródło
Nie i nie powinieneś ich używać.
Dlaczego?
Ponieważ byłby to rodzaj węgierskiego zapisu . Chodzi o to, że funkcje przekazywane do funkcji wyższego rzędu są tylko rodzajem zmiennych. Więc traktuj je w ten sposób.
źródło