Por um Java mais funcional

1,254 views
1,149 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,254
On SlideShare
0
From Embeds
0
Number of Embeds
91
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

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

×