Kotlin
Kotlin

Kotlin e Lambda Functions


Desde seu início, Kotlin oferece um amplo suporte a programação funcional – e o mesmo não seria possível sem uma API eficiente para o uso de Lambda Functions. Em português claro e direto, funções Lambda nada mais são do que funções anônimas, que não estão presas a um identificador, podendo serem passadas para ou retornadas de uma função. Funções que apresentam esse suporte são conhecidas como High Order Functions.

mind blowing
 

Eis abaixo um exemplo simples de lambda function suportada pelo Kotlin:

No snippet acima, criei uma função lambda sum dentro da minha main, que recebe dois inteiros como parâmetro e retorna a soma entre os dois. Note pela sintaxe que a função lambda é envolvida por chaves e que usamos o sinal -> para indicar o retorno, que no nosso caso é o x + y. Não usamos o return em funções lambda no Kotlin.

Existe uma forma alternativa para representarmos a mesma função lambda acima, extraindo a assinatura da função de dentro do lambda:

Essencialmente, fizemos a mesma coisa de duas formas diferentes. Eu particularmente acho a segunda forma mais elegante, mas isso vai do gosto de cada um.

Para usar a função lambda que acabamos de criar, o procedimento é o mesmo de uma função normal:

Passando uma função Lambda como argumento para outra função

O Kotlin disponibiliza em seu core várias funções que operam sobre parâmetros lambda. Um exemplo disso é a função count, que opera em uma Collection contando todos os elementos que correspondem a um determinado critério. Para contarmos inteiros maiores que 5 em uma lista usando o count, passamos a seguinte função lambda como argumento:

Mas podemos simplificar ainda mais o código acima. Primeiro, se sua função receber somente um argumento e este for uma função lambda (como no caso do count) você pode omitir os parênteses:

Outro ponto: se a função lambda recebe somente um parâmetro, você pode omitir sua declaração e usar a palavra it no corpo do lambda:

Lambdas e Closures

Um outro aspecto muito usado na programação funcional são os closures, onde uma função é livre para manipular variáveis dentro do contexto onde ela foi inserida.  A combinação entre funções lambda e o closure permite uma grande redução de linhas de código de maneira transparente.

Por exemplo, se eu quiser somar todos os inteiros da lista criada no exemplo anterior, eu poderia fazer o seguinte:

Note que no exemplo acima, eu consegui acessar a variável sum declarada fora do lambda que passei para o método forEach.

Conclusão

Lambda functions representam um aspecto essencial na programação funcional e permitem reduzir toneladas de códigos de maneira simples e elegante. Tem mais exemplos sobre o uso de lambda functions? Compartilha ai nos comentários 🙂

 


I'm Pedro Mendes, a passionate developer and technology enthusiast. This blog covers programming and technology in the broadest sense possible. It's the place I collect my thoughts, work and findings to share with the public.

View Comments