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.

Slides:



Advertisements
Apresentações semelhantes
Introdução às Java Threads
Advertisements

TÉCNICO EM INFORMÁTICA Linguagem e Técnica de Programação III PROF. MARCELO N. SANTOS
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
TÉCNICO EM INFORMÁTICA Linguagem e Técnica de Programação III PROF. MARCELO N. SANTOS
Introdução à Informática com Software Livre 12:58.
Lógica de Programação Aula 25 Prof. Auler Gomes. Introdução - subrotina Muitos problemas grandes ou nem tão grandes, mas de solução mais complexa podem.
Gerador de aplicativos Oracle PL/SQL WEB baseado na estrutura das tabelas do banco de dados Oracle Wagner da Silva Orientando Prof. Alexander Roberto Valdameri.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Linguagens de Programação Conceitos e Técnicas Expressões Prof. Isabel Cafezeiro
1 Programação em C Aula 7. 2 Um lojista atribui o preço de venda dos itens de sua loja com um número racional (uma fração de inteiros). Este comerciante.
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
CONTAGEM Princípios Básicos Permutações Arranjos Combinações.
Algoritmos e Programação Prof. Marcos Saúde
Padrões de Projeto Composite Observer Strategy Factory Method Mediator Façade.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Algoritmos e Programação utilizando Visualg
Aula 3 - Estruturas de Repetição
Tuplas CHRISTOPHER FREIRE SOUZA EWERTON AMORIM DE OLIVEIRA
Algoritmos e Estruturas de Dados I Prof. Dsc. Alex F. V. Machado
Teoria da Computação Prof. Msc. Ricardo Loiola
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Introdução OO.
Programação Orientada a Objetos
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
Novas Funcionalidades p/ LOO 2
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
Prof. Wellington Franco Sub-Rotinas:Funções e Procedimentos
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Algoritmos e Estruturas de Dados I
FUNDAMENTO DE PROGRAMAÇÃO
Java: Interfaces Alcides Calsavara.
FUNDAMENTOS DE PROGRAMAÇÃO
FUNDAMENTO DE PROGRAMAÇÃO
Fundamentos de Programação1
Criação e manipulação de objetos
Autorizar Programas para Usuários
Subalgoritmo É um trecho de algoritmo construído para resolver parte de um problema maior. Também chamado de módulo. A técnica que consiste dividir o.
4 CONCEITOS BÁSICOS EM POO
Programação Orientada a Objetos
TECNOLOGIA PARA INTERNET 1
Modelagem de Banco de Dados através do ERwin

Construções Lógico –Matemáticas – Aula 08
Aula 22 Modularização 22/10/08.
Linguagem de Programação
Elaborando as Interfaces dos trabalhos das aulas 25, 26 e 27.
Traduções Dirigidas por Sintaxe
3.2 Sobrecarga de Métodos (Overloading)
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
Programação Orientada a Objetos
Programação Funcional
Prof.: Bruno Rafael de Oliveira Rodrigues
Laboratório I Mateus Raeder.
Rosemary Silveira Filgueiras Melo
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Computação Eletrônica Vetores e Matrizes
Referências.
Estruturas de Dados em C
Estruturas definidas pelo programador
Leonardo M G Gallardo Trilha: Testes
Tipos Primitivos de Dados
Curso de Introdução à Lógica Computacional
Ordenando Coleções A Classe Collections.
A interface java.util.List
Programação II Mateus Raeder.
CALCULADORA CARACTERE E VARIÁVEIS COMPOSTAS OU VETORES EM JAVA
Percorrendo coleções com Iterator
Transcrição da apresentação:

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 Scala e LISP.

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.

 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?

 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?

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

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;

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.

 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

 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

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

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.

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.

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

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

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

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

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

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

 g) concatenar atributos dos itens.

 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 }; a -> a > 10

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

 Funções Lambda com Threads

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

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

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

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

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

 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

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

 Funções Lambda com as classes de Collections

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

//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); }

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

//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));

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

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

//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

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

 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”.

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()));

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

Referências  Acesso em 15 mai  Acesso em 15 mai  Acesso em 15 mai  Acesso em 15 mai  Acesso em 15 mai  Acesso em 15 mai  Acesso em 15 mai

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

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.