Funções Anónimas

Neste artigo vamos falar de funções anónimas, da sua história,  a sua usabilidade e ainda mostrar dois exemplos de implementação. Um será em Python, enquanto o segundo será em JavaScript, ou seja, mais orientado para o contexto web. Mas antes de falarmos em funções anónimas vamos primeiro refletir sobre o que é uma função, que é algo, ligeiramente, complicado de explicar a um leigo em programação.

Já pensaram no que responderiam se lhes perguntassem o que é uma função? A mais simples resposta era fazer uma analogia com a Matemática: algo que aceita valores de entrada, transforma-os de alguma maneira e retorna algo no fim. Continuando com a analogia, em Matemática, costumamos dar nome às funções, assim como damos enquanto estamos a programar, mais corretamente designado por identificador. Agora imagine que tem uma função, mas que esse identificador não existia. Esta seria uma função que não tinha de estar ligada a qualquer identificador. Aqui temos o princípio básico das funções anónimas.

No presente artigo, vamos tratá-las por funções anónimas, mas são também conhecidas por funções lambda,  por terem sido criadas a partir do trabalho de Alonzo Church enquanto desenvolvia o cálculo lambda. Elas são típicas de linguagens funcionais, como o Haskell, Lisp, Ocaml, entre outras. Com o passar dos anos, outras linguagens arranjaram mecanismos de implementar estas funções como por exemplo C#, JavaScript, Python ou ainda Ruby.

Coloca-se uma nova questão: se estamos felizes com as funções comuns e parecem funcionar tão bem, porque devemos usar funções anónimas? E quando devemos usá-las? Dependendo da linguagem com que estamos habituados a programar, já deve ter surgido aquela situação em que o parâmetro de uma função é outra função. Aqui teríamos de declarar uma função no início ou no fim do bloco de código para ser usada uma única vez. Com as funções anónimas, e caso a linguagem suporte closure ganhamos uma maior simplicidade no código, escrevendo estas funções estrategicamente colocadas onde são usadas. São também muito utilizadas na técnica de currying, para transformar funções de múltiplos parâmetros numa cadeia de funções, onde apenas é passado um de cada vez.

Posto tudo isto, e como cada caso é um caso, vamos meter mãos à obra, primeiro com Python e depois com JavaScript, como já havia sido referido.