Por um Java mais funcionalChristian Reichel@chrisreichel
Motivação• Maioria dos projetos são problemas de  gerenciamento de informações• Expressividade• Concorrência         * htt...
Princípios• Imutabilidade• Recursão• Lazy evaluation• Closures e funções como objetos de  primeiro nível
Imutabilidade
Imutabilidade
Recursão• Não há estados mutáveis• Em Java é ruim (cada chamada gera um  overhead grande)• forEach: sem estados mutáveis e...
Lazy Evaluation• Evitar computar um resultado até  o ponto em que ele realmente  seja necessário• Permite definir estrutura...
Funções e Closures•   Classes anônimas podem    ser consideradas funções    anônimas•   Wrapper de Função•   Bibliotecas f...
Closures no Java 8   * http://blog.caelum.com.br/trabalhando-com-closures-no-java-8/   * http://cr.openjdk.java.net/~brian...
Combinators• Operações básicas para lidar com coleções   • filter   • map• Listas são as estruturas de dados centrais• A co...
filterCria uma nova coleção mantendo somente os       elementos que foram filtrados
mapCria uma nova coleção onde cada elemento passa            por uma transformação               * O google guava chama o ...
Estruturas de dados        persistentes•   Coleções imutáveis•   Modificações geram    cópias•   Custoso para grandes    es...
Estruturas de dados        persistentes•   Compartilhamento de    estrutura•   Implementação baseada    em Árvores•   Inte...
•   Google Guava: http://code.google.com/p/guava-libraries/•   Functional Java: http://code.google.com/p/functionaljava//•...
Obrigado•   Google Guava: http://code.google.com/p/guava-libraries/•   Functional Java: http://code.google.com/p/functiona...
Próximos SlideShares
Carregando em…5
×

Por um Java mais funcional

1.270 visualizações

Publicada em

Minha lightning talk no QCON São Paulo de 2011.

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

Sem downloads
Visualizações
Visualizações totais
1.270
No SlideShare
0
A partir de incorporações
0
Número de incorporações
89
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Por um Java mais funcional

  1. 1. Por um Java mais funcionalChristian Reichel@chrisreichel
  2. 2. Motivação• Maioria dos projetos são problemas de gerenciamento de informações• Expressividade• Concorrência * http://mail.openjdk.java.net/pipermail/lambda-dev/2011-August/003877.html
  3. 3. Princípios• Imutabilidade• Recursão• Lazy evaluation• Closures e funções como objetos de primeiro nível
  4. 4. Imutabilidade
  5. 5. Imutabilidade
  6. 6. Recursão• Não há estados mutáveis• Em Java é ruim (cada chamada gera um overhead grande)• forEach: sem estados mutáveis e sem recursão
  7. 7. Lazy Evaluation• Evitar computar um resultado até o ponto em que ele realmente seja necessário• Permite definir estruturas infinitas: ex conjunto dos números inteiros
  8. 8. Funções e Closures• Classes anônimas podem ser consideradas funções anônimas• Wrapper de Função• Bibliotecas funcionais em Java funcionam assim: Guava, Functional Java ...
  9. 9. Closures no Java 8 * http://blog.caelum.com.br/trabalhando-com-closures-no-java-8/ * http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-3.html
  10. 10. Combinators• Operações básicas para lidar com coleções • filter • map• Listas são as estruturas de dados centrais• A combinação do map e do reduce inspiraram a abordagem MapReduce do Hadoop
  11. 11. filterCria uma nova coleção mantendo somente os elementos que foram filtrados
  12. 12. mapCria uma nova coleção onde cada elemento passa por uma transformação * O google guava chama o map de transform...
  13. 13. Estruturas de dados persistentes• Coleções imutáveis• Modificações geram cópias• Custoso para grandes estruturas
  14. 14. Estruturas de dados persistentes• Compartilhamento de estrutura• Implementação baseada em Árvores• Interface pode ser uma List, Map, ...
  15. 15. • Google Guava: http://code.google.com/p/guava-libraries/• Functional Java: http://code.google.com/p/functionaljava//• Totallylazy: http://code.google.com/p/totallylazy/• Lambdaj: http://code.google.com/p/lambdaj/• Apache Commons Functor: http://commons.apache.org/sandbox/functor/
  16. 16. Obrigado• Google Guava: http://code.google.com/p/guava-libraries/• Functional Java: http://code.google.com/p/functionaljava//• Totallylazy: http://code.google.com/p/totallylazy/• Lambdaj: http://code.google.com/p/lambdaj/• Apache Commons Functor: http://commons.apache.org/sandbox/functor/

×