[MÚSICA] [MÚSICA] Olá a todos, meu nome é Eduardo Guerra. Este é o curso de Desenvolvimento Ágil com Java Avançado. Hoje vamos falar das expressões Lambda. As expressões Lambda que foram aí tidas como a grande novidade do Java oito, da nova versão aí da linguagem Java, e a gente vai nessa aula entender o que são as expressões Lambda, para que que elas servem e pouquinho de como elas funcionam, certo? Então, vamos lá. Vamos começar com problema. Vamos seguindo exemplo. Então,,imagine que a gente tem uma lista de produto e você queira aumentar o preço de todos 10%, exemplo aí no Brasil que corriqueiro, hoje dia tudo aumenta muito rápido, então seria com certeza uma rotina que seria muito rodada nos sistemas por aí. Certo? Bom, a gente sabe fazer isso usando aí o famoso Looper, certo então esse aí seria o For it, que também por acaso foi uma, não está na linguagem desde o começo, foi introduzido aí no Java cinco, então, eu tenho ali a lista e eu faço For para cada produto da lista e vou fazer o SetPreço, o P.getPreço vezes ponto então ele está multiplicando por ponto para fazer esse aumento de 10% ele está pegando o preço e setando ali o preço atualizado. Certo, então esse é o jeito que todo mundo sabe fazer. Bom, no Java oito foi introduzido novo método na interface list, que é o método for each. O método for each, ele recebe como parâmetro objeto da interface consumer que ele tem esse método accept. Então, a ideia é que esse for each para cada elemento da lista ele vai criar uma instância de consumer, ele vai pegar uma instância de consumer que ele recebeu como parâmetro e vai chamar o método accept, passando cada dos elementos da coleção como parâmetros. Então, a gente tem esse novo método. Vamos ver como é que ficaria a gente fazer o aumento de preço utilizando esse novo método for each. Então, eu posso ir ali criar consumer, que seria o AumentaDezPorCento, então, eu já crio usando tipo genérico, então eu crio consumer, eu implemento a interface consumer já com tipo genérico definido para produto. Então, com isso, o método accept vai aceitar produto como parâmetro e com isso na implementação eu faço a mudança de preço, fazendo P set preço, p get preço vezes ponto. E aí, eu posso chamar, olhando aqui embaixo, eu posso pegar a minha lista e chamar o método for each passando essa classe AumentaDezPorCento, que é consumer de produto como parâmetro. Não é tão legal porque eu tenho que definir separado, antes se a gente olhar aqui a solução anterior, estava ali dentro do código, não era código muito grande, acabou que essa solução aqui, eu tenho que definir uma classe separada, não ficou tão legal. Será que eu não consigo usar o for each e definir a classe ali junto? Isso aí, como a gente viu divide demais a lógica do programa. Então a outra opção para a gente colocar isso tudo na mesma classe, é utilizar uma classe anônima. Então, como é que funciona isso? Na hora que eu estou, na hora que eu dou ali, que eu chamo o método for each, eu chamo new consumer produto, ou seja, eu estou criando no próprio código uma implementação daquela interface, que a gente chama de classe anônima. Então, ali dentro de consumer eu defino no método accept passando com a implementação do aumento do preço. Bom, isso daí também se a gente ver, é blá blá blá, blá blá blá, bonitinho, mas isso é código pra caramba. A gente conseguia antes fazer isso aí com muito menos código, naquele exemplo que a gente viu lá do simplesmente utilizando o looping. Então, as expressões Lambda vêm aí salvar a gente, que ela dá uma opção interessante, na verdade o método for each ele não necessariamente precisa ser utilizado com o Lambda, mas ele é interessante, ele foi criado justamente pela possibilidade de utilizar Lambda, que a gente viu que nessas opções que a gente viu nos slides anteriores, não vale muito a pena utilizar ele com os recursos anteriores da linguagem. Vamos ver, então, o que seria o Lambda e como que a gente utiliza ele junto com o método for each. Então, eu vou até sair aqui para a gente poder ver melhor aqui. Então, ao invés de criar ali o consumer, o produto e ter que criar a classe anônima, uma forma similar de escrever isso, é utilizando a expressão Lambda. Então, ela primeiro tem ali o parâmetro, que seria o produto P que é que eu espero receber no método accept, uma setinha que na verdade essa setinha, ela é tracinho e símbolo de maior, certo, e por fim eu tenho ali a implementação. Então, basicamente eu estou definindo o consumer produto, utilizando ali essa expressão, que é o que a gente chama de expressão Lambda. Só que dá para melhorar pouquinho mais isso daí. Então, como eu sei que eu espero consumer produto eu posso inferir aquele tipo de parâmetro, e aí eu posso até tirar o parênteses. Então, ao invés de produto P eu posso colocar somente P. Aquele código que vai ali depois da setinha eu preciso do ponto e vírgula, das chaves, quando aquilo ali é mais de comando. Quando é comando só, eu posso tirar aquilo. Então fica menor ainda, então, a gente vai ficar o P setinha P set preço, P get preço vezes ponto. Então, a gente vê ai que isso faz com que reduza bastante aí o tamanho do código. Então, esse aí vou voltar aqui, certo, esse daí é o estilo Lambda de fazer as coisas. Então, antes eu tinha ali o for, para cada lista, para cada da lista eu aumento o preço, e a forma Lambda de escrever isso aí é para cada P, eu vou fazer P, set preço, P get preço, ponto. Certo, então espero que vocês tenham entendido o que que é o Lambda, basicamente o Lambda é uma expressão que vai substituir uma implementação anônima de uma interface, isso aí vai ser resolvida tempo de compilação. E acaba sendo uma alternativa que a gente tem para fazer essas definições de interface. Nas próximas aulas a gente vai ver pouco mais de detalhes sobre isso. Espero que nessa aula vocês tenham tido a noção do que que é o Lambda, como que é a sintaxe do lambda e como que funciona, certo. Muito obrigado, na próxima aula vemos com mais Lambda, Lambda, Lambda. [MÚSICA] [MÚSICA]