SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
DESMISTIFICANDO
A PROGRAMAÇÃO
FUNCIONAL
Gabriel Custódio
Software Engineer @ ReclameAQUI
@gbrlcustodio
WHOAMI
O que é?
Funciona?
Como se parece?
Do que se
alimenta?
01
03
02
04
In computer science, functional programming is a programming
paradigm where programs are constructed by applying and
composing functions. It is a declarative programming paradigm
in which function definitions are trees of expressions that each
return a value, rather than a sequence of imperative statements
which change the state of the program or world.
Wikipedia
O QUE É A PROGRAMAÇÃO
FUNCIONAL?
Functional programming is a style of programming
which models computations as the evaluation of
expressions.
Haskell Wiki
O QUE É A PROGRAMAÇÃO
FUNCIONAL?
“A language that doesn't affect the way you think
about programming is not worth knowing.”
Alan J. Perlis
ESTUDO DE CASO
ARQUITETURA DE SOFTWARE
FUNCIONA,
PORÉM...
VAMOS
REFAZER!
INSIRA SEU FRAMEWORK FAVORITO AQUI
Complexidade .01
Compartilhamento de
estado mutável
.03
Mágica.02
Paralelismo.04
Funções devem associáveis
a variáveis e permitir sua
manipulação.
✔ A saída depende da
entrada;
✔ Nenhum efeito colateral.
Construídas sobre funções
de primeira classe;
Recebem uma função como
argumento ou retornam uma
função.
FUNÇÕES PURAS FUNÇÕES DE ALTA ORDEMFUNÇÕES DE PRIMEIRA CLASSE
DEFINIÇÃO DE CONCEITOS
Se você pode substituir uma
chamada de função por seu
valor de retorno sem afetar
o comportamento da
aplicação.
Impossível modificar
estrutura da dados já
existentes. ✔ Funções anônimas (lambda)
✔ Currying
IMUTABILIDADE BASEADA NO
CÁLCULO LAMBDA
TRANSPARÊNCIA REFERENCIAL
DEFINIÇÃO DE CONCEITOS
COMPOSIÇÃO
Funções de primeira classe &
Funções de alta ordem &
Lambda
PREVISIBILIDADE
PREVISIBILIDADE
Funções puras &
Imutabilidade!
Problema!
Cópias
Cópias
Cópias
PERSISTENT
DATA STRUCTURE
SIDE
EFFECTS!
BONUS POINT:
PARALELISMO
LEI DE MOORE
Em 1965, Gordon Moore fez uma previsão que determinaria o
ritmo da revolução digital moderna. Moore concluiu que o poder
da computação aumentaria tremendamente e que seu custo
relativo cairia a um ritmo vertiginoso.
https://www.intel.com.br/content/www/br/pt/silicon-innovations/moores-law-technology.html
MULTICORE
Não determinístico =
processamento paralelo + estado mutável
PROCESSO NÃO
DETERMINÍSTICO
BENEFÍCIOS
Um trecho de código é dito thread safe se este
funciona corretamente no contexto onde existem
múltiplas threads.
THREAD SAFETY
Quando um processo nunca é executado.
STARVATION FREE
Impasse onde dois ou mais processos ficam impedidos
de continuar suas execuções, ou seja, ficam
bloqueados, esperando uns pelos outros.
DEADLOCK FREE
Código previsível + efeitos colaterais controlados =
código manutenível
CONSEQUÊNCIA
PROBLEMAS
INICIAIS
MUDANÇA DE
MENTALIDADE
LOOPS &
RECURSÃO
PATTERN
MATCHING
POR ONDE
COMEÇAR?
CLOJURE?
ERLANG?
ELIXIR?
HASKELL?
JAVASCRIPT?
JAVASCRIPT!
ESCOLHA O SEU SABOR!
CASES DE SUCESSO
Perguntas?
gbrlcustodio@outlook.com
OBRIGADO!
◂ Template da apresentação do Slidesgo
◂ Icones do Flaticon
◂ Inspirado na talk de Russ Olsen
◂ Conceitos extraídos de inúmeros artigos na interwebs, porém,
kudos para Core Functional Programming Concepts
Créditos

Mais conteúdo relacionado

Semelhante a Desmistificando a programação funcional

Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Vinicius Pulgatti
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Arquitetando sistemas PHP
Arquitetando sistemas PHPArquitetando sistemas PHP
Arquitetando sistemas PHPEduardo Cesar
 
Apresentação final
Apresentação finalApresentação final
Apresentação finalvalmon
 
Arquitetura pragmática
Arquitetura pragmáticaArquitetura pragmática
Arquitetura pragmáticaLuiz Borba
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Klederson Bueno
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal RailsLuiz Costa
 
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...iMasters
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaGabriel Schade Cardoso
 
Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernate
Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernateAnálise Comparativa de Persistência de Dados Entre Hibernate e NHibernate
Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernateRicardo Rinco
 
Boas práticas e os princípios de qualidade em código
Boas práticas e os princípios de qualidade em códigoBoas práticas e os princípios de qualidade em código
Boas práticas e os princípios de qualidade em códigoMariana de Azevedo Santos
 

Semelhante a Desmistificando a programação funcional (20)

Aula10
Aula10Aula10
Aula10
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-concepts
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Anti-patterns
Anti-patternsAnti-patterns
Anti-patterns
 
Arquitetando sistemas PHP
Arquitetando sistemas PHPArquitetando sistemas PHP
Arquitetando sistemas PHP
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
Arquitetura pragmática
Arquitetura pragmáticaArquitetura pragmática
Arquitetura pragmática
 
O que devo procurar em um code review
O que devo procurar em um code review O que devo procurar em um code review
O que devo procurar em um code review
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal Rails
 
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-dia
 
Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernate
Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernateAnálise Comparativa de Persistência de Dados Entre Hibernate e NHibernate
Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernate
 
Boas práticas e os princípios de qualidade em código
Boas práticas e os princípios de qualidade em códigoBoas práticas e os princípios de qualidade em código
Boas práticas e os princípios de qualidade em código
 

Mais de GDGFoz

Apresentação GDG Foz 2023
Apresentação GDG Foz  2023Apresentação GDG Foz  2023
Apresentação GDG Foz 2023GDGFoz
 
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e RemotoDesenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e RemotoGDGFoz
 
Introdução do DEVSECOPS
Introdução do DEVSECOPSIntrodução do DEVSECOPS
Introdução do DEVSECOPSGDGFoz
 
Aquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e MicroservicesAquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e MicroservicesGDGFoz
 
Robótica Sucational
Robótica SucationalRobótica Sucational
Robótica SucationalGDGFoz
 
A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile GDGFoz
 
Qualidade em Testes de Software
Qualidade em Testes de SoftwareQualidade em Testes de Software
Qualidade em Testes de SoftwareGDGFoz
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTGDGFoz
 
Dart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideDart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideGDGFoz
 
UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?GDGFoz
 
Dicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsDicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsGDGFoz
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopGDGFoz
 
Automação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceGDGFoz
 
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?GDGFoz
 
Microsserviços com Kotlin
Microsserviços com KotlinMicrosserviços com Kotlin
Microsserviços com KotlinGDGFoz
 
Autenticação de dois fatores
Autenticação de dois fatores Autenticação de dois fatores
Autenticação de dois fatores GDGFoz
 
Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!GDGFoz
 
Hooks em React: o novo jeito de fazer componentes funcionais
Hooks em React: o novo jeito de fazer componentes funcionaisHooks em React: o novo jeito de fazer componentes funcionais
Hooks em React: o novo jeito de fazer componentes funcionaisGDGFoz
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoGDGFoz
 
Styled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto TauilleStyled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto TauilleGDGFoz
 

Mais de GDGFoz (20)

Apresentação GDG Foz 2023
Apresentação GDG Foz  2023Apresentação GDG Foz  2023
Apresentação GDG Foz 2023
 
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e RemotoDesenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
 
Introdução do DEVSECOPS
Introdução do DEVSECOPSIntrodução do DEVSECOPS
Introdução do DEVSECOPS
 
Aquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e MicroservicesAquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e Microservices
 
Robótica Sucational
Robótica SucationalRobótica Sucational
Robótica Sucational
 
A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile
 
Qualidade em Testes de Software
Qualidade em Testes de SoftwareQualidade em Testes de Software
Qualidade em Testes de Software
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoT
 
Dart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideDart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client Side
 
UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?
 
Dicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsDicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOps
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & Desktop
 
Automação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com Opensource
 
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
 
Microsserviços com Kotlin
Microsserviços com KotlinMicrosserviços com Kotlin
Microsserviços com Kotlin
 
Autenticação de dois fatores
Autenticação de dois fatores Autenticação de dois fatores
Autenticação de dois fatores
 
Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!
 
Hooks em React: o novo jeito de fazer componentes funcionais
Hooks em React: o novo jeito de fazer componentes funcionaisHooks em React: o novo jeito de fazer componentes funcionais
Hooks em React: o novo jeito de fazer componentes funcionais
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativo
 
Styled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto TauilleStyled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto Tauille
 

Desmistificando a programação funcional