Существует ли соглашение об именах для функций более высокого порядка? То есть функции, которые возвращают другие функции.
Пример в 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]
Я обычно писал так, как указано выше: то есть оптимизировал разборчивость в точке вызова (последние строки выше я читал как «фильтровать массив, чтобы получить элементы, кратные только 5»), однако в точке определения далеко из контекста, в котором она используется, не так просто понять, что делает эта функция по ее названию.
Ответы:
Нет, я не думаю, что вам нужно специальное соглашение об именах, чтобы указать, что вы возвращаете функцию. Как мы видим из языков, в которых функции каррируются , возвращение функции по сути аналогично наличию функции с несколькими аргументами. например, есть небольшая разница между
onlyDivisibleBy(3)(6)
иonlyDivisibleBy(3,6)
Я бы поменял имя с
onlyDivisibleBy
наisDivisibleBy
хотя, так как я думаю, чтоis
это более распространенный способ указать предикат иonlyDivisibleBy(3)(6)
кажется странным возвращать,true
учитывая, что 6, очевидно, также делится на 2источник
В строго типизированных функциональных языках из сигнатуры функции очевидно, что является функцией более высокого порядка, а что нет, поэтому в этом просто нет необходимости.
На других языках я никогда не сталкивался с таким соглашением об именах, и я не могу думать о таком, который не был бы просто громоздким. Я думаю, что лучше сконцентрироваться на функциях именования, чем перегружать такие имена.
источник
Нет, и вы не должны использовать любой.
Почему?
Потому что это будет своего рода венгерская нотация . Идея состоит именно в том, что функции, передаваемые в функции более высокого порядка, являются просто разновидностью переменных. Так относись к ним так.
источник