Desvabrando Java 8: Lambda
Faaaaaaaaaaaaaaaaaaala galera! Estou dando uma estudada sobre as coisas legais que estão contidas no Java 8, e venho aqui neste falar um pouco sobre o Lambda! :p. Não o de lamber :D.
Java 8, o que é Lambda?
Esse tema de programação funcional está
em alta no mundo corporativo. Funções anônimas foram nomeadas do sistema
do Church, adquirido no inicio pela linguagem LISP, as quais deram
origem à família as linguagens funcionais.
Definição: Uma
função anônima é uma expressão que representa uma definição de método
“em-linha”. Ela não tem valor ou tipo em si, mas pode ser convertida em
um delegate compatível ou em uma expressão do tipo árvore. Por razões
históricas existem dois tipos sintáticos das funções anônimas:
expressões lambda e expressões anônimas de métodos. O operador “->”
tem a mesma precedência como a atribuição (=) e associativo à direita.
Alguns exemplos de linguagens funcionais
são: Javascript, Python e Ruby, das quais tornam possível um equilíbrio
entre linguagem funcional e imperativas. Na nova versão do Java 8, essa
“linguagem funcional” deverá ser incorporada através de lambda expressions.
Rotinas como ordernar lista, selecionar elementos através de algum
critério pré-estabelecido ou mesmo extrair valores de uma propriedade de
um objeto que está em uma lista, são atualmente tarefas repetitivas na
vida de um programador Java. Resumindo, em um futuro próximo poderemos
com a nova versão implementar um código de forma mais concisa e sem
perder a legibilidade. Hoje existem bibliotecas que implementam tais
facilidades (Guava e a LambdaJ).
Para iterar sobre uma lista de inteiros, normalmente iteramos conforme abaixo:
List inteiros = Arrays.asList( 10 , 30 , 40 , 50 , 60 , 70 ); for (Integer inteiro : inteiros) { System.out.println( "valor: " + inteiro); } |
Em lambda:
inteiros.forEach(valor -> System.out.println(valor)); |
O compilador descobre que a expressão lambda tendo a mesma assinatura do método implementado pela interface Consumer e tratar a primeira como instância da segunda, o bytecode gerado poderia ser diferente.
A declaração dos tipos dos argumentos de expressão lambda pode ser, na maior parte dos casos, inferido pelo compilador e depois omitido.
Mas podemos reescrever esta última expressão de forma mais “enxuta” usando uma referência do método.
Fazendo referência a um método usando o operador :: novo:
inteiros.forEach(System.out::println); |
Lambdas se pareceu mais produtivo a nós desenvolvedores.
Java 8 promete muitas melhorias aguardadas pelos desenvolvedores desde que a Sun foi comprada pela Oracle.
Mudanças devem ocorrer no Java por parte da Oracle. Esteja preparado para não ter que tentar absorver elas de uma hora para outra.
Aumentando sua produtividade profissional, outros ganhos poderão ser obtidos, então evoluir é necessário.
Então é isso! Abraço galera e até a proxima.
Bruno Rafael.
Comentários
Postar um comentário