O que é uma função de primeira classe?
"Função de primeira classe" é um termo que pode ser aplicado em programação de computadores e ciência da computação a uma linguagem de programação de computadores se o tratamento de funções aderir a um conjunto de diretrizes, embora o escopo e a profundidade completos dessas diretrizes não sejam formalmente acordados. . Para ter uma linguagem de programação de computador de primeira classe, o principal recurso a ser suportado é a capacidade de passar funções como argumentos para outras funções. Uma função também deve poder ser atribuída a uma variável para que possa ser armazenada. Outras propriedades usadas para determinar o que constitui uma função de primeira classe incluem a capacidade de gerar dinamicamente uma função em tempo de execução e a capacidade do idioma de ter uma função como valor de retorno de outra função. Os idiomas que suportam a arquitetura de funções de primeira classe permitem um alto nível de abstração e também, em alguns casos, fornecem um mecanismo para a geração dinâmica de código em tempo de execução.
Quando o termo "função" é usado em um sentido pouco definido, o conceito de passar uma função dentro de um programa por meio de variáveis não é necessariamente exclusivo de linguagens que implementam nativamente o suporte a funções de primeira classe. A capacidade de passar blocos de código para funções ou retornar código não dinâmico de uma função pode ser facilmente realizada em muitas linguagens de programação por meio de diferentes mecanismos. Uma das partes estritas da definição de uma linguagem de função de primeira classe, no entanto, é que o manuseio de funções como variáveis deve ser feito de forma nativa, sem o uso de metadados como definições condicionais e sem chamar um compilador para recompilar um pedaço de código. O termo "função" também é usado para se referir a blocos de código independentes chamados por conta própria, o que significa que eles não incluem os blocos de código conhecidos como métodos em linguagens de programação orientadas a objetos ou os blocos às vezes chamados de procedimentos em outras linguagens.
Quando um idioma é projetado para permitir código de função de primeira classe, alguns padrões de design podem ser implementados mais diretamente do que em outros idiomas. Uma função pode receber uma função como variável e, em seguida, construir uma nova função e retornar a nova função ao código de chamada, portanto, isso cria um mecanismo para a criação em tempo de execução do código do programa. Isso também pode possibilitar o uso de funções inseridas pelo usuário em tempo real no idioma, sem o uso de processos como reflexão ou avaliação.
Alguns dos usos mais básicos da arquitetura de funções de primeira classe incluem a criação de funções genéricas que podem ser facilmente reutilizadas e a implementação de algoritmos matemáticos recursivos capazes de auto-modificar suas equações à medida que progridem. Um uso semelhante e mais avançado para mecanismos de primeira classe é a implementação do polimorfismo em linguagens nas quais ele não é especificamente implementado. Isso pode permitir que funções sejam chamadas com a mesma assinatura de função, mas executa o código com base no contexto em que foi chamado, às vezes passando uma função de chave para a função polimórfica.