39
Globalcode – Open4education JDK 8: Lambda, Jigsaw e novidades Eder Magalhães @edermag www.yaw.com.br Saturday, July 7, 12

JDK8: Lambda, Jigsaw e novidades

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

JDK 8: Lambda, Jigsaw e novidades

Eder Magalhães@edermag

www.yaw.com.br

Saturday, July 7, 12

Page 2: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Agenda

Plano B: a evolução do Java;As novidades do JDK 8;Projeto Lambda;Projeto Jigsaw;Type Annotations;Planejamento e datas;Links;

Saturday, July 7, 12

Page 3: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Evolução do Java pós Oracle

Passados 6 anos;Várias funcionalidades solicitadas;Qual planejamento para entrega?

Saturday, July 7, 12

Page 4: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 5: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

A escolha foi o Plano B!

Saturday, July 7, 12

Page 6: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 7: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Projeto Lambda:Java funcional

Saturday, July 7, 12

Page 8: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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.

Saturday, July 7, 12

Page 9: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 10: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 11: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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

Saturday, July 7, 12

Page 12: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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

Saturday, July 7, 12

Page 13: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};

Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2));

Lambda Expression

Tarefa básica: ordernar array em Java

Saturday, July 7, 12

Page 14: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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

Saturday, July 7, 12

Page 15: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Ordenando strings com Lambda III

String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};

Arrays.sort(nomes, String::compareToIgnoreCase);

Method reference

Saturday, July 7, 12

Page 16: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Functional interfacesInterfaces com um método, utilizadas em callback;Conhecidas anteriormente como SAM Types.Exemplos:

ComparatorRunnableActionListenerFileFilterPathMatcher...

Saturday, July 7, 12

Page 17: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Detalhes sobre lambdas expressionsSintaxe também pode ser usada em return; Variáveis não precisam ser final;É possível utilizar target typing para definir atributos;

Saturday, July 7, 12

Page 18: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Method referencesFuncionam 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;

Saturday, July 7, 12

Page 19: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

As coleções com LambdaDefinem uma forma mais inteligente para navegar sobre elementos;Modelo parecido com SQL!

Saturday, July 7, 12

Page 20: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Navegação nos elementos

List<Aluno> alunos = buildAlunos();

//navegar em todos os alunosfor (Aluno a: alunos) { System.out.println("\t"+a);}

Saturday, July 7, 12

Page 21: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Navegação nos elementos

List<Aluno> alunos = buildAlunos();

//navegar em todos os alunosfor (Aluno a: alunos) { System.out.println("\t"+a);}

//navegar somente nos aprovadosfor (Aluno a: alunos) { if (a.getNota() > 5) { System.out.println("\t"+a); }}

Saturday, July 7, 12

Page 22: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Navegação nos elementos com Lambda

List<Aluno> alunos = buildAlunos();

//navegar em todos os alunosalunos.forEach(a -> { System.out.println("\t" + a); });

//navegar somente nos aprovadosalunos.filter(a -> a.getNota() > 5) .forEach(a -> { System.out.println("\t" + a); });

Saturday, July 7, 12

Page 23: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Interfaces: método com corpo!

A partir de lambda será possível definir um comportamento default para métodos declarados em interfaces!

Saturday, July 7, 12

Page 24: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Projeto Jigsaw: Java modular

Saturday, July 7, 12

Page 25: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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

Saturday, July 7, 12

Page 26: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Projeto Jigsaw

Suporte a modularização da linguagem Java;Tornar o modelo de distribuição e execução do Java mais eficaz;

Saturday, July 7, 12

Page 27: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 28: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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}

Saturday, July 7, 12

Page 29: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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>

Saturday, July 7, 12

Page 30: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 31: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

O que maisOs módulos são carregados estaticamente;Interoperabilidade com OSGI e Maven;Integração com os IDEs Java;

Saturday, July 7, 12

Page 32: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 33: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Type Annotations Demopublic 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!

Saturday, July 7, 12

Page 34: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Planejamento de entregasM1: abril de 2012;M2: junho de 2012;...M6: janeiro de 2013;

GA: setembro de 2013;

Saturday, July 7, 12

Page 35: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Experimente:http://jdk8.java.nethttp://jdk8.java.net/lambdahttp://download.java.net/jigsaw/b38/

Saturday, July 7, 12

Page 36: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

Código disponível em:

https://github.com/edermag/yaw-jdk8-lambdahttps://github.com/edermag/yaw-jdk8-jigsaw

Saturday, July 7, 12

Page 37: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

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;

Saturday, July 7, 12

Page 39: JDK8: Lambda, Jigsaw e novidades

Globalcode  –  Open4education

[email protected]@edermag

Obrigado !

Saturday, July 7, 12