SlideShare uma empresa Scribd logo
1 de 89
Baixar para ler offline
programação funcional
que funciona
Talk is
cheap.
Show me the
code.
Linus Torvalds
https://github.com/serradura/request_via
+ concorrente
+ concorrente
+ consumo de memória
Um código melhor de:
desenvolver,
manter e
evoluir.
Tudo que usa blocos poderá ser
melhorado com o uso de
funções (aka: lambdas). Ex:
● Active Admin
● Concurrent Ruby
Objetivos
Porque
programação
funcional se
tornou relevante
para mim e
deveria se tornar
relevante para
você.
Porque
programação
funcional é
relevante para o
ecossistema Ruby.
Porque
programação
funcional se
tornou relevante
para mim e
deveria se tornar
relevante para
você.
Como se tornou relevante para
mim?
Resposta rápida:
Resposta não tão rápida...
if hearts, do it more
often.
Martin Fowler
Junho / 2017
Me coloquei à
disposição para
organizar o
próximo Meetup
23/06.
3 Hello Worlds
em Elm.
22/06
Junho / 2017
Entrei para
comunidade
Elm via
ElmBrasil no
Telegram
20/06.
Roadmap do
Elm, como Evan
Czaplicki
prioriza os
próximos.
(Simplicidade)
24/06
Primeiros reflexos:
Criei uma abstração
compondo funções
para gerenciar o ciclo
de vida do JS no
Turbolinks.
28/06.
Junho / 2017
Me coloquei à
disposição para
organizar o
próximo Meetup
20/06.
3 Hello Worlds
em Elm.
22/06
Entrei para
comunidade
Elm via
ElmBrasil no
Telegram
20/06.
Roadmap do
Elm, como Evan
Czaplicki
prioriza os
próximos.
(Simplicidade)
24/06
Primeiros reflexos:
Criei uma abstração
compondo funções
para gerenciar o ciclo
de vida do JS no
Turbolinks.
28/06.
Me coloquei à
disposição para
organizar o
próximo Meetup
23/06.
3 Hello Worlds
em Elm.
22/06
Entrei para
comunidade
Elm via
ElmBrasil no
Telegram
20/06.
Roadmap do
Elm, como Evan
Czaplicki
prioriza os
próximos.
(Simplicidade)
24/06
Primeiros reflexos:
Criei uma abstração
compondo funções
para gerenciar o ciclo
de vida do JS no
Turbolinks.
28/06.
Junho / 2017
Julho / 2017
Implementação
do Strong
Parameters
(Ruby) numa
abordagem
funcional.
10/07.
Julho / 2017
Implementação
do Strong
Parameters
(Ruby) numa
abordagem
funcional.
10/07.
Julho / 2017
Implementação
do Strong
Parameters
(Ruby) numa
abordagem
funcional.
10/07.
Julho / 2017
Abordagem
/Abstração
reativa (FRP)
para orquestrar
um stream de
eventos
28/07.
Julho / 2017
Implementação
do Strong
Parameters
(Ruby) numa
abordagem
funcional.
10/07.
Contribuição
para
vue-turbolinks
com direito a
variações!
20/07
Abordagem
/Abstração
reativa (FRP)
para orquestrar
um stream de
eventos
28/07.
Implementação
do Strong
Parameters
(Ruby) numa
abordagem
funcional.
10/07.
Contribuição
para
vue-turbolinks
com direito a
variações!
20/07
Julho / 2017
Agosto / 2017
Mandaram eu
ler o Mostly
Adequate
Guide to
Functional
Programming
08/08.
Agosto / 2017
Criar o DOM via
composição de
funções no estilo
Elm com jQuery e
Ramda
23/08
Mandaram eu
ler o Mostly
Adequate
Guide to
Functional
Programming
08/08.
Agosto / 2017
Criar o DOM via
composição de
funções no estilo
Elm com jQuery e
Ramda
23/08
Mandaram eu
ler o Mostly
Adequate
Guide to
Functional
Programming
08/08.
Agosto / 2017
Criar o DOM via
composição de
funções no estilo
Elm com jQuery e
Ramda
23/08
Benchmark para
comparar a
performance do uso de
Funções VS Métodos
estáticos e de instância
em Ruby
25/08.
2º ElmSP
Pagar.me
28/08
Mandaram eu
ler o Mostly
Adequate
Guide to
Functional
Programming
08/08.
Agosto / 2017
Criar o DOM via
composição de
funções no estilo
Elm com jQuery e
Ramda
23/08
Benchmark para
comparar a
performance do uso de
Funções VS Métodos
estáticos e de instância
em Ruby
25/08.
2º ElmSP
Pagar.me
28/08
Operador de
composição do
Elm no Ruby
30/08.
Mandaram eu
ler o Mostly
Adequate
Guide to
Functional
Programming
08/08.
Agosto / 2017
Criar o DOM via
composição de
funções no estilo
Elm com jQuery e
Ramda
23/08
Benchmark para
comparar a
performance do uso de
Funções VS Métodos
estáticos e de instância
em Ruby
25/08.
2º ElmSP
Pagar.me
28/08
Operador de
composição do
Elm no Ruby
30/08.
Setembro / 2017
You might not need
#reactjs, or #redux,
follows an example of
how you can do
everything with @jquery
and ES201*.
18/09.
Setembro / 2017
You might not need
#reactjs, or #redux,
follows an example of
how you can do
everything with @jquery
and ES201*.
18/09.
Setembro / 2017
You might not need
#reactjs, or #redux,
follows an example of
how you can do
everything with @jquery
and ES201*.
18/09.
Setembro / 2017
@jodosha (criador do
Hanami) publica os melhores
slides sobre Functional
Objects em Ruby que havia
visto.
27/09
30LOC to implement a
complete and
extensible EventBus in a
FP approach.
28/09
3º ElmSP
TW
28/09
You might not need
#reactjs, or #redux,
follows an example of
how you can do
everything with @jquery
and ES201*.
18/09.
Setembro / 2017
@jodosha (criador do
Hanami) publica os melhores
slides sobre Functional
Objects em Ruby que havia
visto.
27/09
30LOC to implement a
complete and
extensible EventBus in a
FP approach.
28/09
3º ElmSP
TW
28/09
Outubro / 2017
Video
Luca Guidi - @jodosha
Functional web with
Ruby
09/10.
Outubro / 2017
RequestVia 0.1.0:
A Functional HTTP Client
That Wraps Net::HTTP
30/10.
Video
Luca Guidi - @jodosha
Functional web with
Ruby
09/10.
Outubro / 2017
RequestVia 0.1.0:
A Functional HTTP Client
That Wraps Net::HTTP
30/10.
Novembro / 2017
Novembro / 2017
Programação funcional -
Hands on em diferentes
tecnologias para manjar
dos paranauê.
01/11.
Novembro / 2017
Programação funcional -
Hands on em diferentes
tecnologias para manjar
dos paranauê.
01/11.
Unleash new amazing
possibilities writing Ruby
functional objects!
10/11.
Novembro / 2017
Programação funcional -
Hands on em diferentes
tecnologias para manjar
dos paranauê.
01/11.
Unleash new amazing
possibilities writing Ruby
functional objects!
10/11.
Novembro / 2017
Programação funcional -
Hands on em diferentes
tecnologias para manjar
dos paranauê.
01/11.
Unleash new amazing
possibilities writing Ruby
functional objects!
10/11.
Novembro / 2017
Programação funcional -
Hands on em diferentes
tecnologias para manjar
dos paranauê.
01/11.
Unleash new amazing
possibilities writing Ruby
functional objects!
10/11.
Novembro / 2017
Programação funcional -
Hands on em diferentes
tecnologias para manjar
dos paranauê.
01/11.
Unleash new amazing
possibilities writing Ruby
functional objects!
10/11.
When classes are verbs, they act like functions.
compound expressions == combination of functions
Novembro / 2017
Programação funcional -
Hands on em diferentes
tecnologias para manjar
dos paranauê.
01/11.
Unleash new amazing
possibilities writing Ruby
functional objects!
10/11.
When classes are verbs, they act like functions.
compound expressions == combination of functions
Mindset funcional
Business analysis
Transformação SaídaEntrada
Definição formal de um processo
Agile
Funções???
https://en.wikipedia.org/wiki/Function_(mathematics)
Princípios de
programação funcional
em Ruby.
https://www.ruby-lang.org/en/about/#fn3
Função de alta ordem
High-order function
Função como valores
First class functions
Funções puras
Pure/Stateless functions
Recursão
Closures
Imutabilidade
If all the methods are pure functions.
The objects are data!
Functional First Development
First, code
everything you can
without using any
side effects.
Then, code your
side effects.
Functional First Development
http://dry-rb.org/
kudos.
@renanranelli@_rchaves_@arthurxavierx
@serradura
Obrigado

Mais conteúdo relacionado

Mais procurados

IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsLeonardo Comelli
 
Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?Better Developer
 
DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?Carlos Felippe Cardoso
 
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...Taller Negócio Digitais
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featuretdc-globalcode
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Além do MVP com PHP - TDC POA 2015
Além do MVP com PHP  - TDC POA 2015Além do MVP com PHP  - TDC POA 2015
Além do MVP com PHP - TDC POA 2015Romeu Mattos
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)Felipe Pimentel
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendiVinta Software
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 

Mais procurados (19)

#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
Refactoring
RefactoringRefactoring
Refactoring
 
Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?
 
DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?
 
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
 
A saga do desenvolvedor java
A saga do desenvolvedor javaA saga do desenvolvedor java
A saga do desenvolvedor java
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e feature
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Além do MVP com PHP - TDC POA 2015
Além do MVP com PHP  - TDC POA 2015Além do MVP com PHP  - TDC POA 2015
Além do MVP com PHP - TDC POA 2015
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendi
 
Ruby on rails porque usar rails?!
Ruby on rails   porque usar rails?!Ruby on rails   porque usar rails?!
Ruby on rails porque usar rails?!
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 

Semelhante a Programação funcional que funciona

Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaGabriel Molter
 
Ruby on Rails e o Mercado
Ruby on Rails e o MercadoRuby on Rails e o Mercado
Ruby on Rails e o MercadoJulio Monteiro
 
Entendendo um pouco melhor o que é Ruby
Entendendo um pouco melhor o que é RubyEntendendo um pouco melhor o que é Ruby
Entendendo um pouco melhor o que é Rubycodeland
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercadoelliando dias
 
Palestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço FilhoPalestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço Filhorafarubert
 
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Getúlio Strapazzon
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Andre Bernardes
 
Frameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPFrameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPElton Minetto
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
Ruby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na webRuby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na webRodrigo Manhães
 
Apresentação de ruby parte 5
Apresentação de ruby parte 5Apresentação de ruby parte 5
Apresentação de ruby parte 5Wende Mendes
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros PassosJackson F. de A. Mafra
 

Semelhante a Programação funcional que funciona (20)

Ruby and Rails
Ruby and RailsRuby and Rails
Ruby and Rails
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e Prática
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Ruby on Rails e o Mercado
Ruby on Rails e o MercadoRuby on Rails e o Mercado
Ruby on Rails e o Mercado
 
Entendendo um pouco melhor o que é Ruby
Entendendo um pouco melhor o que é RubyEntendendo um pouco melhor o que é Ruby
Entendendo um pouco melhor o que é Ruby
 
Desenvolvimento agil ifc
Desenvolvimento agil ifcDesenvolvimento agil ifc
Desenvolvimento agil ifc
 
Ruby e Rails
Ruby e RailsRuby e Rails
Ruby e Rails
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercado
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Palestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço FilhoPalestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço Filho
 
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
 
Ruby
RubyRuby
Ruby
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011
 
Frameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPFrameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHP
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
XPT Framework
XPT FrameworkXPT Framework
XPT Framework
 
Ruby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na webRuby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na web
 
Apresentação de ruby parte 5
Apresentação de ruby parte 5Apresentação de ruby parte 5
Apresentação de ruby parte 5
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Aula Ruby
Aula RubyAula Ruby
Aula Ruby
 

Programação funcional que funciona