A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação Lambda em Java 8 Juliana Lopes. O que é Lambda  O lambda veio com o objetivo de adicionar ao Java técnicas de linguagens funcionais, como.

Apresentações semelhantes


Apresentação em tema: "Programação Lambda em Java 8 Juliana Lopes. O que é Lambda  O lambda veio com o objetivo de adicionar ao Java técnicas de linguagens funcionais, como."— Transcrição da apresentação:

1 Programação Lambda em Java 8 Juliana Lopes

2 O que é Lambda  O lambda veio com o objetivo de adicionar ao Java técnicas de linguagens funcionais, como Scala e LISP.

3 O que são linguagens funcionais?  Programação funcional baseia-se no conceito de função.  Pode-se pensar na programação funcional como simplesmente avaliação de expressões.

4  Funcionamento: O programador define uma função para resolver um problema e passa essa função para o computador.  Uma função pode envolver várias outras funções em sua definição. O que são linguagens funcionais?

5  O Computador funciona então como uma calculadora que avalia expressões escritas pelo programador através de simplificações até chegar a uma forma normal.  Exemplo:  f(x) = x³ + 3 é definida em termos de exponenciação e adição. O que são linguagens funcionais?

6  Atualmente mais usada para fins acadêmicos.  Notáveis usadas para fins comerciais:  R (estatística)  Mathematica (matemática simbólica)  K (análise financeira)

7 Cálculo Lambda  Projetado por Alonzo Church, 1930;  É um modelo que oferece uma maneira muito formal de descrever um cálculo de uma função;

8 Calculo Lambda  Pode ser considerado a primeira linguagem de programação funcional;  Linguagens como Lisp, Miranda, ML, Haskell são baseadas em Cálculo Lambda.

9  O Cálculo Lambda pode ser visto como uma linguagem de programação abstrata em que funções podem ser combinadas para formar outras funções; Cálculo Lambda

10  Trata funções como, entidades que podem, como um dado qualquer, ser usadas como argumento e retonados como valores de uma função. Cálculo Lambda

11 Lambda  Também é baseado em um Domain Specific Language(DSL) que facilita muito a criação de código legível.

12 O que é Domain Specific Language?  Domain Specif Language ou Linguagem de Domínio Específico, em português, são os paradgimas e funções, ou códigos específicos, de uma linguagem de programação ou linguagem de especificação dedicada a um domínio de problema particular;  Ou seja, é o nome dado a prática de se criar pequenas linguagens para resolver um problemas bem específicos.

13 Vantagem do lambda  A grande vantagem de funções lambda é diminuir a quantidade de código necessária para a escrita de algumas funções.  O cálculo lambda é uma forma mais simplificada de codificar funções recursivas.

14 O que eu consigo fazer utilizando o Lambda?  a) filtrar itens dada uma condição;

15  b) selecionar determinados atributos dos itens; O que eu consigo fazer utilizando o Lambda?

16  c) atribuir valores as propriedades de cada item; O que eu consigo fazer utilizando o Lambda?

17  d) ordenar os itens através de seus atributos; O que eu consigo fazer utilizando o Lambda?

18  e) agrupar itens; O que eu consigo fazer utilizando o Lambda?

19  f) somar valores de um determinado atributo numérico dos itens; O que eu consigo fazer utilizando o Lambda?

20  g) concatenar atributos dos itens.

21  As funções lambda em Java tem a sintaxe definida como (argumento) -> (corpo). (int a, int b) -> { return a + b; } () -> System.out.println("Hello World"); (String s) -> { System.out.println(s); } () -> 42 () -> { return 3.1415 }; a -> a > 10

22  ((Uma função lambda é uma função sem declaração, isto é, não é necessário colocar um nome, um tipo de retorno e o modificador de acesso.  A ideia é que o método seja declarado no mesmo lugar em que será usado.  Uma função lambda pode ter nenhum ou vários parâmetros  e seus tipos podem ser colocados ou podem ser omitidos,  assim, eles são inferidos pelo Java (veremos alguns exemplos disso mais para frente).  A função lambda pode ter nenhum ou vários comandos: se a mesma tiver apenas um comando, as chaves não são obrigatórias e a função retorna o valor calculado na expressão;  se a função tiver vários comandos, é necessário colocar as chaves e também o comando return - se nada for retornado, a função tem um retorno void. ))

23  Funções Lambda com Threads

24  Vamos implementar programa que cria uma thread com uma função interna  e que vai apenas mostrar a mensagem “Thread com classe interna!”.

25 Runnable r = new Runnable(){ public void run(){ System.out.println("thread com classe interna!"); } }; new Thread(r).start();

26  Já com a utilização de expressões lambda, o código ficará mais simples e bem menor que o anterior.  O exemplo 2 mostra um exemplo do código da expressão lambda com threads.

27 Runnable r = () -> System.out.println("Thread com função lambda!"); new Thread(r).start();

28  Essa expressão não passa nenhum parâmetro, pois ela será passada para a função run, definida na interface Runnable, que não tem nenhum parâmetro, então ela também não tem nenhum retorno.

29  Um código ainda mais simples é a passagem da função diretamente como parâmetro para o construtor da classe Thread.  O exemplo 3 mostra um exemplo desse código

30 new Thread ( () -> System.out.println("hello world") ).start();

31  Funções Lambda com as classes de Collections

32  O exemplo 4 mostra um exemplo de como normalmente é feito o código para percorrer uma lista e imprimir os valores dentro dela.

33 //Imprimindo os elementos de uma lista System.out.println("Imprime os elementos da lista!" ); List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); for (Integer n: list){ System.out.println(n); }

34  Com as funções lambda basta chamar o método forEach de uma lista, que é um método que espera uma função lambda como parâmetro.  O exemplo 5 mostra o exemplo de imprimir todos os elementos de uma lista com expressão lambda.

35 //Imprimindo os elementos de uma lista com expressões lambda System.out.println("Imprime todos os elementos da lsita!"); List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); list.forEach(n -> System.out.println(n));

36  Funções lambda podem ser utilizadas também para a ordenação de listas com a interface Comparator.  Por exemplo, caso exista uma classe Pessoa com os atributos nome e idade e é necessário ordenar uma lista em ordem alfabética pelo nome, ou em ordem das idades,   é necessário implementar dois comparators, um para cada tipo de parâmetro, e chamá-lo no método sort da lista que será ordenada.  O exemplo 6 mostra o código do exemplo descrito utilizando a interface Comparator tradicional.

37 System.out.println("Ordenado pessoas pelo nome:"); List listPessoas = Arrays.asList(new Pessoa("Nazare", 52), new Pessoa("Juliana", 25)); Collections.sort(listPessoas, new Comparator (){ @Override public int compare(Pessoa pessoa1, Pessoa pessoa2) { return pessoa1.getNome().compareTo(pessoa2.getNome()); } }); listPessoas.forEach(p -> System.out.println(p.getNome())); COMPARATOR TRADICIONAL

38 //Comparator com expressões lambda List listPessoas = Arrays.asList(new Pessoa("Nazare", 52), new Pessoa("Juliana", 25)); System.out.println("Ordenando pessoas pelo nome: "); Collections.sort(listPessoas, (Pessoa pessoa1, Pessoa pessoa2) -> pessoa1.getNome().compareTo(pessoa2.getNome())); listPessoas.forEach(p -> System.out.println(p.getNome())); E AGORA UM COMPARATOR COM EXPRESSÕES LAMBDA

39  Vejam que os dois exemplos implementam exatamente a mesma funcionalidade, mas o código utilizando expressões lambda tem poucas linhas, enquanto que o código que não utiliza expressões lambda tem quase 10 linhas.

40  Com expressões lambda também é possível filtrar elementos de uma coleção de objetos criando para isso um stream de dados (também um novo conceito do Java 8).  É chamado o método filter do stream e como parâmetro para esse método é passado uma função lambda que faz o filtro dos elementos desejados.  O exemplo 7 mostra dois exemplos de filtros sendo realizados na listagem de pessoas. O primeiro filtro é feito apenas para pessoas com mais de 30 anos e o segundo para apenas pessoas que tem o nome iniciado com a letra “J”.

41 List listPessoas = Arrays.asList(new Pessoa("Nazare", 32), new Pessoa("Juliana", 25)); System.out.println("Pessoas com mais de 30 anos:"); List maioresTrinta = listPessoas.stream().filter( p -> p.getIdade() > 30).collect(Collectors.toList()); maioresTrinta.forEach(p -> System.out.println(p.getNome())); System.out.println("Pessoas que o nome iniciam com J:"); List nomesIniciadosJ = listPessoas.stream().filter( p -> p.getNome().startsWith("J")).collect(Collectors.toList()); nomesIniciadosJ.forEach(p -> System.out.println(p.getNome()));

42  Como vocês puderam ver, as funções lambda são mecanismos bastante poderosos, que facilitam a escrita de código conciso e evitam que o programador seja obrigado a escrever muito código, principalmente em operações simples, além de flexibilizar o mesmo.  Apesar de serem bastante úteis, as funções lambda nem sempre são a melhor opção, caso seja necessário reutilizar diversas vezes uma função, talvez seja melhor criar uma classe ou interface com apenas um método e não uma expressão lambda.

43 Referências  http://www.devmedia.com.br/novidades-do-java-8-do-lambda-ao-metaspace/29056 Acesso em 15 mai 2016. http://www.devmedia.com.br/novidades-do-java-8-do-lambda-ao-metaspace/29056  http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826 Acesso em 15 mai 2016. http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826  https://code.google.com/archive/p/functionaljava/ Acesso em 15 mai 2016. https://code.google.com/archive/p/functionaljava/  https://code.google.com/archive/p/lambdaj/ Acesso em 15 mai 2016. https://code.google.com/archive/p/lambdaj/  https://code.google.com/archive/p/lambdaj/wikis/LambdajFeatures.wiki Acesso em 15 mai 2016. https://code.google.com/archive/p/lambdaj/wikis/LambdajFeatures.wiki  http://www.infoq.com/br/news/2010/11/lambdaj Acesso em 15 mai 2016. http://www.infoq.com/br/news/2010/11/lambdaj  http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826> Acesso em 15 mai 2016. http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826

44  Para a ciência da computação o cálculo lambda é importante porque é uma forma equivalente a se escrever a máquina de Turing.  O cálculo lambda é uma forma mais simplificada de codificar funções recursivas.

45 O que é Lambda  As funções Lambda vieram do cálculo lambda que foi desenvolvido por Church na mesma época de Allan Turing.  Várias funções lamdas aceitam parametros. Se utilizar essas funções você estará utilizando uma tecnica chamade de Alta Ordem de Programa Funcional.


Carregar ppt "Programação Lambda em Java 8 Juliana Lopes. O que é Lambda  O lambda veio com o objetivo de adicionar ao Java técnicas de linguagens funcionais, como."

Apresentações semelhantes


Anúncios Google