JDK8: Lambda, Jigsaw e novidades

2,077 views
1,990 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,077
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
45
Comments
0
Likes
2
Embeds 0
No embeds

No notes for 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

×