Função de primeira classe

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Função de Primeira Classe)

Em ciência da computação, diz-se que uma linguagem de programação tem funções de primeira classe se ela trata as funções como cidadãos de primeira classe. Isso significa que a linguagem suporta a passagem de funções como argumentos para outras funções, retornando-as como os valores de outras funções e atribuindo-as a variáveis ​​ou armazenando-as em estruturas de dados.[1] Alguns teóricos da linguagem de programação também requerem suporte para funções anônimas (literais de função).[2] Em linguagens com funções de primeira classe, os nomes das funções não têm nenhum estado especial. Eles são tratados como variáveis ​​comuns com um tipo de função.[3] O termo foi cunhado por Christopher Strachey no contexto de "funções como cidadãos de primeira classe" em meados da década de 1960.[4]

As funções de primeira classe são uma necessidade para o estilo de programação funcional, no qual o uso de funções de ordem superior é uma prática padrão. Um exemplo simples de função de ordem superior é a função map, que recebe, como seus argumentos, uma função e uma lista, e retorna a lista formada pela aplicação da função a cada membro da lista. Para que uma linguagem suporte map, ela deve suportar a passagem de uma função como um argumento.

Existem certas dificuldades de implementação em passar funções como argumentos ou retorná-las como resultados, especialmente na presença de variáveis ​​não locais introduzidas em funções aninhadas e anônimas. Historicamente, essas dificuldades foram chamados de problemas funarg, o nome vindo de "function argument" (argumento de função, em português).[5] Nas primeiras linguagens imperativas, esses problemas foram evitados por não suportar funções como tipos de resultado (por exemplo, ALGOL 60, Pascal) ou omitir funções aninhadas e, portanto, variáveis ​​não locais (por exemplo, C). A antiga linguagem funcional Lisp adotou a abordagem de escopo dinâmico, onde variáveis ​​não locais se referem à definição mais próxima daquela variável no ponto onde a função é executada, ao invés de onde ela foi definida. O suporte adequado para funções de primeira classe com escopo léxico foi introduzido em Scheme e requer o tratamento de referências a funções como clausuras em vez de ponteiros de função vazios,[4] que, por sua vez, torna a coleta de lixo uma necessidade.

Referências

  1. Abelson, Harold; Sussman, Gerald Jay (1984). Structure and Interpretation of Computer Programs. [S.l.]: MIT Press. Formulating Abstractions with Higher-Order Procedures. ISBN 0-262-01077-1 
  2. Programming language pragmatics, by Michael Lee Scott, section 11.2 "Functional Programming".
  3. Roberto Ierusalimschy; Luiz Henrique de Figueiredo; Waldemar Celes (2005). «The Implementation of Lua 5.0». Journal of Universal Computer Science. 11 (7): 1159–1176. doi:10.3217/jucs-011-07-1159 
  4. a b Burstall, Rod; Strachey, Christopher (2000). «Understanding Programming Languages» (PDF). Higher-Order and Symbolic Computation. 13 (52): 11–49. doi:10.1023/A:1010052305354. Cópia arquivada (PDF) em 16 de fevereiro de 2010  (também em 16-02-2010)
  5. Joel Moses. "The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem". MIT AI Memo 199, 1970.

Ligações externas[editar | editar código-fonte]


Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.