terça-feira, 16 de dezembro de 2014

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). 

Vou começar a descrever lambdas com um exemplos rápido, fazendo um comparativo de como realizamos uma implementação no dia de hoje e como deverá ser implementado com ela.
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));
Para entender um pouco do funcionamento de lambda, é necessário observar a expressão em duas partes, a primeira à esquerda do símbolo da seta (->) listando os seus parâmetros e a outra à direita contém o corpo.
 

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);
Conclusão:
 

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.

Nenhum comentário:

Postar um comentário

Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.