Há uma diferença. Quando você diz que um idioma tem funções de primeira classe, significa que o idioma trata as funções como valores - que você pode atribuir uma função a uma variável, passá-la por aí etc. Funções de ordem superior são funções que funcionam em outras funções, significando que eles assumem uma ou mais funções como argumento e também podem retornar uma função.
O conceito de "ordem superior" pode ser aplicado a funções em geral, como funções no sentido matemático. O conceito de "primeira classe" tem apenas a ver com funções em linguagens de programação. É raramente usado quando se refere a uma função, como "uma função de primeira classe". É muito mais comum dizer que "uma linguagem tem / não suporta funções de primeira classe".
As duas coisas estão intimamente relacionadas, pois é difícil imaginar uma linguagem com funções de primeira classe que também não suportaria funções de ordem superior e, inversamente, uma linguagem com funções de ordem superior, mas sem o suporte de funções de primeira classe.
int
ouchar
, no sentido de que não podem ser explicitamente definidas (por um corpo de função) onde você desejar.As funções de primeira classe são tratadas como um objeto (ou atribuíveis a uma variável).
Funções de ordem superior são funções que usam pelo menos uma função de primeira classe como parâmetro ou retornam pelo menos uma função de primeira classe.
fonte
Eles são diferentes.
Funções de primeira classe
Os valores em um idioma tratado de maneira uniforme são chamados de "primeira classe". Eles podem ser armazenados em estruturas de dados, passados como argumentos ou usados em estruturas de controle.
Pode-se dizer que idiomas que suportam valores com tipos de função e os tratam da mesma forma que valores sem função, têm "funções de primeira classe".
Funções de ordem superior
Uma das conseqüências de ter funções de primeira classe é que você deve poder passar uma função como argumento para outra função. A última função agora é de "ordem superior". É uma função que assume uma função como argumento.
O exemplo canônico é "mapa"
Ou seja, ele pega uma função e uma matriz e retorna uma nova matriz com a função aplicada a cada elemento.
Idiomas funcionais - idiomas em que as funções são o principal meio de criação de programas - todos têm funções de primeira classe. A maioria também possui funções de ordem superior (exceções muito raras são linguagens como o Excel, que podem ser consideradas funcionais, mas não de ordem superior).
fonte
Além das respostas anteriores, observe que um idioma com funções de primeira classe habilita automaticamente a expressão de funções de ordem superior (porque você pode passar funções como parâmetros como qualquer outro valor).
Por outro lado, você pode imaginar linguagens que suportam funções de ordem superior, mas não tornam as funções de primeira classe (e onde os parâmetros que são funções são tratados especialmente e diferentes dos parâmetros de valor "comuns").
Portanto, a presença de funções de primeira classe (como um recurso de linguagem) implica a presença de funções de ordem superior, mas não o contrário.
fonte
As funções de primeira classe podem:
Função de alta ordem é uma função que retorna outra função.
Por exemplo:
fonte
Funções de primeira classe significam tudo que você pode fazer com outros tipos (variáveis, booleanos, números ...), você pode fazê-lo com funções.
Por exemplo, atribua-os a variáveis, repasse-os e crie-os rapidamente.
fonte