SlideShare uma empresa Scribd logo
1 de 16
Por um Java mais funcional




Christian Reichel
@chrisreichel
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
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 sem
  recursão
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
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 ...
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
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
filter
Cria uma nova coleção mantendo somente os
       elementos que foram filtrados
map
Cria uma nova coleção onde cada elemento passa
            por uma transformação




               * O google guava chama o map de transform...
Estruturas de dados
        persistentes
•   Coleções imutáveis

•   Modificações geram
    cópias

•   Custoso para grandes
    estruturas
Estruturas de dados
        persistentes
•   Compartilhamento de
    estrutura

•   Implementação baseada
    em Árvores

•   Interface pode ser uma
    List, Map, ...
•   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/
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/

Mais conteúdo relacionado

Semelhante a Por um Java mais funcional

Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
Rangel Javier
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
pichiliani
 

Semelhante a Por um Java mais funcional (20)

Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Web tools pt-br
Web tools pt-brWeb tools pt-br
Web tools pt-br
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
 
Docker.io:
Docker.io: Docker.io:
Docker.io:
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
Programacao funcional
Programacao funcionalProgramacao funcional
Programacao funcional
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Arquitetura IMGD da Plataforma de Integração Magic xpi 4 - Magic Sem Segredos...
Arquitetura IMGD da Plataforma de Integração Magic xpi 4 - Magic Sem Segredos...Arquitetura IMGD da Plataforma de Integração Magic xpi 4 - Magic Sem Segredos...
Arquitetura IMGD da Plataforma de Integração Magic xpi 4 - Magic Sem Segredos...
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 

Último

Último (9)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

Por um Java mais funcional

  • 1. Por um Java mais funcional Christian 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
  • 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. filter Cria uma nova coleção mantendo somente os elementos que foram filtrados
  • 12. map Cria 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/