SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
Usando programação
funcional agora!
Rodrigo Domingues
rodrigosd@ciandt.com
Quem sou eu?
● Trabalho com desenvolvimento há 10 anos
● Trabalho com Java há 8 anos
● Arquiteto de Software na CI&T
● Nerd
rodrigosd@ciandt.com
no twitter :(
Programação Funcional
101
Java 8
Pensa em uma lista
List<String> herois =
Arrays.asList("Batman", "Super Man", "Iron Man",
"Hulk", "Flash", "Spider Man");
@Test
public void lambda() {
for(String heroi: herois){
System.out.println(heroi);
}
}
@Test
public void lambda() {
herois.forEach(new Consumer<String>() {
public void accept(String heroi) {
System.out.println(heroi);
}
});
}
@Test
public void lambda() {
herois.forEach(
(String heroi) -> {
System.out.println(heroi);
}
);
}
@Test
public void lambda() {
herois.forEach(heroi->System.out.println(heroi));
}
@Test
public void lambda() {
herois.forEach(System.out::println);
}
Adicionando magia negra!
● Uma sequência de "trens" que suporta
operações agregadas de forma sequencial
ou paralela
O que é stream
Stream<String> heroisStream = herois.stream();
//Um Stream pode ser dividido em 3 partes
// 1 - Estrutura inicial (resposável por criar o Stream)
herois.stream()
// 2 - Estrutura intermediária, que é resposável por
// executar as funcões que você deseja
.filter(s -> s.startsWith("S"))
// 3 - Estrutura terminal, que é resposável por realizar
// a finalização do fluxo, é decidir qual vai ser o resultado
.collect(Collectors.toList());
● Collection.steam()
● Arrays.stream(Object[])
● Stream.of(Object[])
● IntStream.range(int, int)
● IntStream.rangeClosed(int, int)
● BufferedReader.lines()
● Files.list(path)
●
Estrutura inicial
● filter
● map
● sorted
● flatMap
● flatMapDouble
● limit
● skip
● etc
Estrutura intermediária
● collect
● max
● mim
● sum
● count
● toArray
● allMatch
● anyMatch
● etc
Estrutura final
● sorted
● unsorted
● distinct
● parallel
● sequential
Estruturas auxiliares
Considerando as funções...
E o paralelismo que
comentei?!
Face the brutal facts!
Saia daqui hoje, e use na segunda!
● Comparator <-> <java>
● Function <-> Transform
● Predicate <-> Predicate*
● Consumer <-> Closure
● Collector <-> (CollectionUtils.select...)
● Criar Nova <-> -
Java8 vs Commons Collection
akieras@ciandt.com
CollectionUtils
Traz "métodos" comuns em linguagens
funcionais:
● Collection collect(Collection c, Transformer t)
● boolean exists(Collection c, Predicate p)
● void filter(Collection c, Predicate p)
● Object find(Collection c, Predicate p)
● void forAllDo(Collection c, Closure cl)
● Collection select(Collection c, Predicate p)
● Collection selectRejected(Collection c, Predicate p)
● void transform(Collection c, Transformer t)
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
Nem tudo são flores
Mudança de paradigma é
árduo
Em alguns casos
precisamos de estado
Por que me apaixonei?!
Código mais expressivo.
Legibilidade.
Testes, teste, teste.
Resumindo
THANKS
FOR
BEING
HERE!

Mais conteúdo relacionado

Destaque

Sistemas distribuidos java_8
Sistemas distribuidos java_8Sistemas distribuidos java_8
Sistemas distribuidos java_8Luiz Malmonge
 
Usando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De JogosUsando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De JogosHamilton Lima
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasjesuinoPower
 
Como criar o jogo 2048 em Java 8 e JavaFX
Como criar o jogo 2048 em Java 8 e JavaFXComo criar o jogo 2048 em Java 8 e JavaFX
Como criar o jogo 2048 em Java 8 e JavaFXBruno Borges
 
Enriquecendo o legado - DevCamp 2016
Enriquecendo o legado - DevCamp 2016Enriquecendo o legado - DevCamp 2016
Enriquecendo o legado - DevCamp 2016Henrique Weissmann
 
Construindo uma cultura de agilidade - O processo de transformação de uma eng...
Construindo uma cultura de agilidade - O processo de transformação de uma eng...Construindo uma cultura de agilidade - O processo de transformação de uma eng...
Construindo uma cultura de agilidade - O processo de transformação de uma eng...André Suman Pereira
 
De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016
De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016
De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016André Suman Pereira
 
De São Paulo a Sidney, Ágil em times distribuídos - TDC2016
De São Paulo a Sidney, Ágil em times distribuídos - TDC2016De São Paulo a Sidney, Ágil em times distribuídos - TDC2016
De São Paulo a Sidney, Ágil em times distribuídos - TDC2016André Suman Pereira
 
O papel dos projetos na gestão estratégica focada em resultados
O papel dos projetos na gestão estratégica focada em resultadosO papel dos projetos na gestão estratégica focada em resultados
O papel dos projetos na gestão estratégica focada em resultadosWankes Leandro
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaBruno Croci
 
Criando jogos digitais em java
Criando jogos digitais em javaCriando jogos digitais em java
Criando jogos digitais em javaMichel Montenegro
 
Text Analytics para o Mercado Financeiro - Devcamp 2015
Text Analytics para o Mercado Financeiro - Devcamp 2015Text Analytics para o Mercado Financeiro - Devcamp 2015
Text Analytics para o Mercado Financeiro - Devcamp 2015Leandro Guerra
 
Y, Z, Millennials... A polêmica de uma geração e o que podemos aprender com ela
Y, Z, Millennials... A polêmica de uma geração e o que podemos aprender com elaY, Z, Millennials... A polêmica de uma geração e o que podemos aprender com ela
Y, Z, Millennials... A polêmica de uma geração e o que podemos aprender com elaTatiana Garcia Loth
 
DevOps: Continous Delivery - Como os feedbacks são importantes
DevOps: Continous Delivery - Como os feedbacks são importantesDevOps: Continous Delivery - Como os feedbacks são importantes
DevOps: Continous Delivery - Como os feedbacks são importantesErik Etsushi Miyashita
 
Classificação de documentos
Classificação de documentosClassificação de documentos
Classificação de documentosDextra
 
Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...
Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...
Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...CA Technologies
 
Ux na vida real deedz
Ux na vida real  deedzUx na vida real  deedz
Ux na vida real deedzDextra
 
Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...
Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...
Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...Wankes Leandro
 
Google Cloud Vision API
Google Cloud Vision APIGoogle Cloud Vision API
Google Cloud Vision APIMichel Pereira
 

Destaque (20)

Sistemas distribuidos java_8
Sistemas distribuidos java_8Sistemas distribuidos java_8
Sistemas distribuidos java_8
 
Usando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De JogosUsando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De Jogos
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e Lambdas
 
Como criar o jogo 2048 em Java 8 e JavaFX
Como criar o jogo 2048 em Java 8 e JavaFXComo criar o jogo 2048 em Java 8 e JavaFX
Como criar o jogo 2048 em Java 8 e JavaFX
 
Enriquecendo o legado - DevCamp 2016
Enriquecendo o legado - DevCamp 2016Enriquecendo o legado - DevCamp 2016
Enriquecendo o legado - DevCamp 2016
 
Construindo uma cultura de agilidade - O processo de transformação de uma eng...
Construindo uma cultura de agilidade - O processo de transformação de uma eng...Construindo uma cultura de agilidade - O processo de transformação de uma eng...
Construindo uma cultura de agilidade - O processo de transformação de uma eng...
 
De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016
De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016
De São Paulo a Sidney, Ágil em times distribuídos - DevCamp2016
 
De São Paulo a Sidney, Ágil em times distribuídos - TDC2016
De São Paulo a Sidney, Ágil em times distribuídos - TDC2016De São Paulo a Sidney, Ágil em times distribuídos - TDC2016
De São Paulo a Sidney, Ágil em times distribuídos - TDC2016
 
O papel dos projetos na gestão estratégica focada em resultados
O papel dos projetos na gestão estratégica focada em resultadosO papel dos projetos na gestão estratégica focada em resultados
O papel dos projetos na gestão estratégica focada em resultados
 
Devcamp 2015
Devcamp 2015Devcamp 2015
Devcamp 2015
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em Java
 
Criando jogos digitais em java
Criando jogos digitais em javaCriando jogos digitais em java
Criando jogos digitais em java
 
Text Analytics para o Mercado Financeiro - Devcamp 2015
Text Analytics para o Mercado Financeiro - Devcamp 2015Text Analytics para o Mercado Financeiro - Devcamp 2015
Text Analytics para o Mercado Financeiro - Devcamp 2015
 
Y, Z, Millennials... A polêmica de uma geração e o que podemos aprender com ela
Y, Z, Millennials... A polêmica de uma geração e o que podemos aprender com elaY, Z, Millennials... A polêmica de uma geração e o que podemos aprender com ela
Y, Z, Millennials... A polêmica de uma geração e o que podemos aprender com ela
 
DevOps: Continous Delivery - Como os feedbacks são importantes
DevOps: Continous Delivery - Como os feedbacks são importantesDevOps: Continous Delivery - Como os feedbacks são importantes
DevOps: Continous Delivery - Como os feedbacks são importantes
 
Classificação de documentos
Classificação de documentosClassificação de documentos
Classificação de documentos
 
Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...
Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...
Case Study: Citrix Adopts DevOps Principles to Gain Efficiency and Speed Soft...
 
Ux na vida real deedz
Ux na vida real  deedzUx na vida real  deedz
Ux na vida real deedz
 
Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...
Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...
Gestão de Partes Interessadas (Stakeholder Management): a 10a área de conheci...
 
Google Cloud Vision API
Google Cloud Vision APIGoogle Cloud Vision API
Google Cloud Vision API
 

Semelhante a [Devcamp] usando programação funcional agora!

Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.Rodrigo Senra
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphereEloi Júnior
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoPaulo Morgado
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em CElaine Cecília Gatto
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)JugVale
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Pedro Guerreiro
 
Programação funcional com java 8
Programação funcional com java 8Programação funcional com java 8
Programação funcional com java 8Leonardo Neuwald
 
Programação Funcional com Java 8
Programação Funcional com Java 8Programação Funcional com Java 8
Programação Funcional com Java 8Cristian R. Silva
 

Semelhante a [Devcamp] usando programação funcional agora! (20)

Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
String e IO
String e IOString e IO
String e IO
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Java 8 - New Features
Java 8 - New FeaturesJava 8 - New Features
Java 8 - New Features
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Jug bizus
Jug   bizusJug   bizus
Jug bizus
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014
 
TDD Primeiro Contato
TDD Primeiro ContatoTDD Primeiro Contato
TDD Primeiro Contato
 
Programação funcional com java 8
Programação funcional com java 8Programação funcional com java 8
Programação funcional com java 8
 
Programação Funcional com Java 8
Programação Funcional com Java 8Programação Funcional com Java 8
Programação Funcional com Java 8
 

Mais de Rodrigo Stefani Domingues

[2020 git lab commit] continuous infrastructure
[2020 git lab commit] continuous infrastructure[2020 git lab commit] continuous infrastructure
[2020 git lab commit] continuous infrastructureRodrigo Stefani Domingues
 
[TDC - Testes] Estratégia de automação dos testes em microserviços
[TDC - Testes] Estratégia de automação dos testes em microserviços [TDC - Testes] Estratégia de automação dos testes em microserviços
[TDC - Testes] Estratégia de automação dos testes em microserviços Rodrigo Stefani Domingues
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 
[Polis Hyperlink ] Apache Camel na vida real
[Polis Hyperlink ] Apache Camel na vida real[Polis Hyperlink ] Apache Camel na vida real
[Polis Hyperlink ] Apache Camel na vida realRodrigo Stefani Domingues
 

Mais de Rodrigo Stefani Domingues (7)

[2020 git lab commit] continuous infrastructure
[2020 git lab commit] continuous infrastructure[2020 git lab commit] continuous infrastructure
[2020 git lab commit] continuous infrastructure
 
[TDC - Testes] Estratégia de automação dos testes em microserviços
[TDC - Testes] Estratégia de automação dos testes em microserviços [TDC - Testes] Estratégia de automação dos testes em microserviços
[TDC - Testes] Estratégia de automação dos testes em microserviços
 
[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
[qCon Rio 2015] Arquitetura Incremental
[qCon Rio 2015] Arquitetura Incremental[qCon Rio 2015] Arquitetura Incremental
[qCon Rio 2015] Arquitetura Incremental
 
[Polis Hyperlink ] Apache Camel na vida real
[Polis Hyperlink ] Apache Camel na vida real[Polis Hyperlink ] Apache Camel na vida real
[Polis Hyperlink ] Apache Camel na vida real
 
[Q con] apache camel e eip na vida real
[Q con] apache camel e eip na vida real[Q con] apache camel e eip na vida real
[Q con] apache camel e eip na vida real
 

[Devcamp] usando programação funcional agora!