JDK 8: Lambda, Jigsaw e novidades                       Eder Magalhães                         @edermag                   ...
Agenda        Plano B: a evolução do Java;        As novidades do JDK 8;        Projeto Lambda;        Projeto Jigsaw;    ...
Evolução do Java pós Oracle        Passados 6 anos;        Várias funcionalidades solicitadas;        Qual planejamento pa...
Evolução do Java pós Oracle        Passados 6 anos;        Várias funcionalidades solicitadas;        Qual planejamento pa...
A escolha foi o Plano B!                                 Globalcode	  –	  Open4educationSaturday, July 7, 12
As novidades do JDK 8 (JSR 338)            Projeto Lambda: uma linguagem mais eficiente;            Projeto Jigsaw: suport...
Projeto Lambda:                      Java funcional                                 Globalcode	  –	  Open4educationSaturda...
Mas afinal...            O que é um Lambda Expression (closure)?  Lambda expression é um bloco de código (função)  anônimo...
Motivação            Tornar o Java mais eficiente em ambientes            multicore;            Emprega ao Java um modelo ...
Projeto Lambda (JSR 335)            Definição de funções anônimas;            Permite criar referência a métodos;         ...
Tarefa básica: ordernar array em Java       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};       Arrays.sort(nome...
Tarefa básica: ordernar array em Java       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};       Arrays.sort(nome...
Tarefa básica: ordernar array em Java       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};       Arrays.sort(nome...
Ordenando strings com Lambda II       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};       Comparator<String> c =...
Ordenando strings com Lambda III       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};       Arrays.sort(nomes, St...
Functional interfaces            Interfaces com um método, utilizadas em            callback;            Conhecidas anteri...
Detalhes sobre lambdas expressions            Sintaxe também pode ser usada em return;            Variáveis não precisam s...
Method references            Funcionam como expressions, a diferença é que            não definem o corpo e sim a chamada ...
As coleções com Lambda            Definem uma forma mais inteligente para            navegar sobre elementos;            M...
Navegação nos elementos       List<Aluno> alunos = buildAlunos();       //navegar em todos os alunos       for (Aluno a: a...
Navegação nos elementos       List<Aluno> alunos = buildAlunos();       //navegar em todos os alunos       for (Aluno a: a...
Navegação nos elementos com Lambda       List<Aluno> alunos = buildAlunos();       //navegar em todos os alunos       alun...
Interfaces: método com corpo!            A partir de lambda será possível definir um            comportamento default para...
Projeto Jigsaw:                       Java modular                                 Globalcode	  –	  Open4educationSaturday...
Motivação            Java é distribuído monoliticamente;            O rt.jar é grande!            Com Java 7, são quase 20...
Projeto Jigsaw            Suporte a modularização da linguagem Java;            Tornar o modelo de distribuição e execução...
Módulo          É formado por um conjunto de classes e          interfaces;          Pode determinar uma versão;          ...
Exemplo de módulo       //Arquivo modules-info.java       module yaw.projetos @ 1.0 {         class yaw.projetos.Main; //e...
O build          Compilação: javac -modulepath ...          Novos programas:            jmod > definir biblioteca e realiz...
Vamos experimentar          Demo I:            compilar e executar um módulo simples;          Demo II:            definir...
O que mais          Os módulos são carregados estaticamente;          Interoperabilidade com OSGI e Maven;          Integr...
Type Annotations (JSR 308)            Utilizar anotações em outros trechos do código;            Criar um mecanismo eficie...
Type Annotations Demo       public void execute(@NonNull Object ref) {         //algum processamento       }       ...    ...
Planejamento de entregas          M1: abril de 2012;          M2: junho de 2012;          ...          M6: janeiro de 2013...
Experimente:              http://jdk8.java.net              http://jdk8.java.net/lambda              http://download.java....
Código disponível em:    https://github.com/edermag/yaw-jdk8-lambda    https://github.com/edermag/yaw-jdk8-jigsaw         ...
Rumores sobre o Java 9            VM auto ajustável (self tuning);            Suporte a Big Data;            Reificação do...
Links        http://openjdk.java.net/        http://openjdk.java.net/projects/jdk8/        http://openjdk.java.net/project...
Obrigado !                       eder@yaw.com.br                          @edermag                                        ...
Próximos SlideShares
Carregando em…5
×

JDK8: Lambda, Jigsaw e novidades

2.326 visualizações

Publicada em

Slides utilizados na apresentação da palestra: JDK 8: Lambda, Jigsaw e novidades

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.326
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
46
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

JDK8: Lambda, Jigsaw e novidades

  1. 1. JDK 8: Lambda, Jigsaw e novidades Eder Magalhães @edermag www.yaw.com.br Globalcode  –  Open4educationSaturday, July 7, 12
  2. 2. Agenda Plano B: a evolução do Java; As novidades do JDK 8; Projeto Lambda; Projeto Jigsaw; Type Annotations; Planejamento e datas; Links; Globalcode  –  Open4educationSaturday, July 7, 12
  3. 3. Evolução do Java pós Oracle Passados 6 anos; Várias funcionalidades solicitadas; Qual planejamento para entrega? Globalcode  –  Open4educationSaturday, July 7, 12
  4. 4. Evolução do Java pós Oracle Passados 6 anos; Várias funcionalidades solicitadas; Qual planejamento para entrega? A decisão foi compartilhada com a comunidade: Plano A: JDK 7 completo com previsão para 2012; Plano B: JDK 7 com algumas features com previsão para 2011; JDK 8 com funcionalidades complementares com previsão para o final de 2012; Globalcode  –  Open4educationSaturday, July 7, 12
  5. 5. A escolha foi o Plano B! Globalcode  –  Open4educationSaturday, July 7, 12
  6. 6. As novidades do JDK 8 (JSR 338) Projeto Lambda: uma linguagem mais eficiente; Projeto Jigsaw: suporte a definição de módulos; Type Annotations; Conclusão do Projeto Coin; Nova API para datas no Java; Globalcode  –  Open4educationSaturday, July 7, 12
  7. 7. Projeto Lambda: Java funcional Globalcode  –  Open4educationSaturday, July 7, 12
  8. 8. Mas afinal... O que é um Lambda Expression (closure)? Lambda expression é um bloco de código (função) anônimo, com declarações e expressões, que pode ser assinalada a uma variável. Globalcode  –  Open4educationSaturday, July 7, 12
  9. 9. Motivação Tornar o Java mais eficiente em ambientes multicore; Emprega ao Java um modelo de programação funcional; Sintaxe mais simples e clara se comparada a classes anônimas; Globalcode  –  Open4educationSaturday, July 7, 12
  10. 10. Projeto Lambda (JSR 335) Definição de funções anônimas; Permite criar referência a métodos; Interfaces com default methods; Estipula interfaces funcionais (SAMs); Mudanças nas bibliotecas do Java (Collection) para se adequar ao Lambda; Torna o código mais expressivo; Globalcode  –  Open4educationSaturday, July 7, 12
  11. 11. Tarefa básica: ordernar array em Java String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } ); Globalcode  –  Open4educationSaturday, July 7, 12
  12. 12. Tarefa básica: ordernar array em Java String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } ); Globalcode  –  Open4educationSaturday, July 7, 12
  13. 13. Tarefa básica: ordernar array em Java String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2)); Lambda Expression Globalcode  –  Open4educationSaturday, July 7, 12
  14. 14. Ordenando strings com Lambda II String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2); Arrays.sort(nomes, c); Target typing Globalcode  –  Open4educationSaturday, July 7, 12
  15. 15. Ordenando strings com Lambda III String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, String::compareToIgnoreCase); Method reference Globalcode  –  Open4educationSaturday, July 7, 12
  16. 16. Functional interfaces Interfaces com um método, utilizadas em callback; Conhecidas anteriormente como SAM Types. Exemplos: Comparator Runnable ActionListener FileFilter PathMatcher ... Globalcode  –  Open4educationSaturday, July 7, 12
  17. 17. Detalhes sobre lambdas expressions Sintaxe também pode ser usada em return; Variáveis não precisam ser final; É possível utilizar target typing para definir atributos; Globalcode  –  Open4educationSaturday, July 7, 12
  18. 18. Method references Funcionam como expressions, a diferença é que não definem o corpo e sim a chamada a um método qualquer; Tipos de métodos: Métodos static; Um método específico de um determinado objeto; Globalcode  –  Open4educationSaturday, July 7, 12
  19. 19. As coleções com Lambda Definem uma forma mais inteligente para navegar sobre elementos; Modelo parecido com SQL! Globalcode  –  Open4educationSaturday, July 7, 12
  20. 20. Navegação nos elementos List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos for (Aluno a: alunos) { System.out.println("t"+a); } Globalcode  –  Open4educationSaturday, July 7, 12
  21. 21. Navegação nos elementos List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos for (Aluno a: alunos) { System.out.println("t"+a); } //navegar somente nos aprovados for (Aluno a: alunos) { if (a.getNota() > 5) { System.out.println("t"+a); } } Globalcode  –  Open4educationSaturday, July 7, 12
  22. 22. Navegação nos elementos com Lambda List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos alunos.forEach(a -> { System.out.println("t" + a); }); //navegar somente nos aprovados alunos.filter(a -> a.getNota() > 5) .forEach(a -> { System.out.println("t" + a); }); Globalcode  –  Open4educationSaturday, July 7, 12
  23. 23. Interfaces: método com corpo! A partir de lambda será possível definir um comportamento default para métodos declarados em interfaces! Globalcode  –  Open4educationSaturday, July 7, 12
  24. 24. Projeto Jigsaw: Java modular Globalcode  –  Open4educationSaturday, July 7, 12
  25. 25. Motivação Java é distribuído monoliticamente; O rt.jar é grande! Com Java 7, são quase 20k classes; Complexidade em lidar com legado (16 anos); Globalcode  –  Open4educationSaturday, July 7, 12
  26. 26. Projeto Jigsaw Suporte a modularização da linguagem Java; Tornar o modelo de distribuição e execução do Java mais eficaz; Globalcode  –  Open4educationSaturday, July 7, 12
  27. 27. Módulo É formado por um conjunto de classes e interfaces; Pode determinar uma versão; Pode definir um entry-point; Indica a dependência a outros módulos, se necessário; Restringe o acesso; O módulo é definido em modules-info.java; Globalcode  –  Open4educationSaturday, July 7, 12
  28. 28. Exemplo de módulo //Arquivo modules-info.java module yaw.projetos @ 1.0 { class yaw.projetos.Main; //entry-point requires yaw.core @ 0.5; //dependência exports yaw.projetos; //expõe o pacote } Globalcode  –  Open4educationSaturday, July 7, 12
  29. 29. O build Compilação: javac -modulepath ... Novos programas: jmod > definir biblioteca e realizar instalação do módulo; jpkg > distribuição do módulo; Executar: java -m <modulo> Globalcode  –  Open4educationSaturday, July 7, 12
  30. 30. Vamos experimentar Demo I: compilar e executar um módulo simples; Demo II: definir relacionamento entre dois módulos; Demo III: exemplo de módulo que expõe um service; Globalcode  –  Open4educationSaturday, July 7, 12
  31. 31. O que mais Os módulos são carregados estaticamente; Interoperabilidade com OSGI e Maven; Integração com os IDEs Java; Globalcode  –  Open4educationSaturday, July 7, 12
  32. 32. Type Annotations (JSR 308) Utilizar anotações em outros trechos do código; Criar um mecanismo eficiente com regras e validação de tipos do Java baseado em anotações. A evolução da idéia implementada com @Override; Globalcode  –  Open4educationSaturday, July 7, 12
  33. 33. Type Annotations Demo public void execute(@NonNull Object ref) { //algum processamento } ... execute(new Object()); //ok! execute(null); //ñ compila! @NonNull Object ref = getObject(); List<@NonNull String> nomes = ... nomes.add(null); //ñ compila! class ValorNumerico<T extends @Nullable Number> { ...} ValorNumerico<@Nullable Integer> v1; //ok! ValorNumerico<@NonNull Integer> v2; //ñ compila! Globalcode  –  Open4educationSaturday, July 7, 12
  34. 34. Planejamento de entregas M1: abril de 2012; M2: junho de 2012; ... M6: janeiro de 2013; GA: setembro de 2013; Globalcode  –  Open4educationSaturday, July 7, 12
  35. 35. Experimente: http://jdk8.java.net http://jdk8.java.net/lambda http://download.java.net/jigsaw/b38/ Globalcode  –  Open4educationSaturday, July 7, 12
  36. 36. Código disponível em: https://github.com/edermag/yaw-jdk8-lambda https://github.com/edermag/yaw-jdk8-jigsaw Globalcode  –  Open4educationSaturday, July 7, 12
  37. 37. Rumores sobre o Java 9 VM auto ajustável (self tuning); Suporte a Big Data; Reificação dos tipos genéricos; Criar um protocolo de meta-objetos para comunicação com outras linguagens; Suporte a continuations; Globalcode  –  Open4educationSaturday, July 7, 12
  38. 38. Links http://openjdk.java.net/ http://openjdk.java.net/projects/jdk8/ http://openjdk.java.net/projects/jigsaw/doc/ quickstart.html http://openjdk.java.net/projects/lambda/ http://www.infoq.com/br/news/2012/04/jdk-8- milestone-release-dates http://openjdk.java.net/jeps/104 http://slideshare.net/edermag Globalcode  –  Open4educationSaturday, July 7, 12
  39. 39. Obrigado ! eder@yaw.com.br @edermag Globalcode  –  Open4educationSaturday, July 7, 12

×