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...
of 16

Por um Java mais funcional

Minha lightning talk no QCON São Paulo de 2011.
Published on: Mar 4, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Por um Java mais funcional

  • 1. Por um Java mais funcionalChristian Reichel@chrisreichel
  • 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. Princípios• Imutabilidade• Recursão• Lazy evaluation• Closures e funções como objetos de primeiro nível
  • 4. Imutabilidade
  • 5. Imutabilidade
  • 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. 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. 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. 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. 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. filterCria uma nova coleção mantendo somente os elementos que foram filtrados
  • 12. mapCria uma nova coleção onde cada elemento passa por uma transformação * O google guava chama o map de transform...
  • 13. Estruturas de dados persistentes• Coleções imutáveis• Modificações geram cópias• Custoso para grandes estruturas
  • 14. Estruturas de dados persistentes• Compartilhamento de estrutura• Implementação baseada em Árvores• Interface pode ser uma List, Map, ...
  • 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. 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/

Related Documents