Existe uma convenção de nomenclatura para funções de ordem superior? Ou seja, funções que retornam outras funções.
Um exemplo em 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]
Eu tenho a tendência de escrevê-lo da maneira acima: ou seja, otimizar a legibilidade no ponto de chamada (eu li as últimas linhas acima como "filtre a matriz para obter itens divisíveis apenas por 5"), no entanto, no ponto de definição do contexto em que é usada, não é tão fácil entender o que essa função faz com o nome.
Respostas:
Não, acho que você não precisa de uma convenção de nomenclatura especial para indicar que está retornando uma função. Como podemos ver nos idiomas em que as funções são curry , retornar uma função é essencialmente o mesmo que ter uma função com vários argumentos. por exemplo, há pouca diferença entre
onlyDivisibleBy(3)(6)
eonlyDivisibleBy(3,6)
Eu mudaria o nome de
onlyDivisibleBy
para,isDivisibleBy
pois acho queis
é uma maneira mais comum de indicar um predicado eonlyDivisibleBy(3)(6)
parece estranho retornar,true
pois 6 claramente também é divisível por 2fonte
Nas linguagens funcionais fortemente tipadas, é óbvio pela assinatura da função o que é uma função de ordem superior e o que não é, portanto, simplesmente não há necessidade.
Em outros idiomas, nunca me deparei com uma convenção de nomes assim e não consigo pensar em uma que não seria apenas complicada. Melhor me concentrar nas funções de nomeação do que sobrecarregar os nomes assim, eu acho.
fonte
Não, e você não deve usar nenhum.
Por quê?
Porque isso seria um tipo de notação húngara . A idéia é exatamente que funções passadas para funções de ordem superior são apenas um tipo de variáveis. Então, trate-os assim.
fonte