SlideShare una empresa de Scribd logo
1 de 26
Programação Funcional
Kickoff Web 2016
Programação Funcional
O que é
Quais problemas resolve
Como usar
O que é uma linguagem funcional
Uso nas empresas
Inputs/Outputs de Funções
Toda função possui inputs e outputs:
Input: int x
Output: int
Inputs/Outputs de Funções
Toda função possui inputs e outputs:
Input: hidden
Output: hidden
Inputs/Outputs de Funções
Inputs e/ou outputs escondidos, requerem e fazem
coisas que não sabemos apenas lendo sua API.
Inputs/Outputs de Funções
E isso tem um nome: Side-Effects
Side-Effects
Podemos ver uma função como essa:
E pensarmos que temos alguma ideia do que ela
faz, mas estaremos errados!
Side-Effects
Ao encontrarmos uma função assim temos 3
opções:
Ler e entender tudo que acontece internamente
Trazer toda complexidade pra cima
Ignorar e torcer pro melhor dos cenários
Ignorar geralmente leva a grandes problemas
Então Side-Effects são ruins?
Mais difícil de debugar
Mais difícil de testar
Temos que confiar que o estado do sistema vai
continuar igual no longo prazo
Como podemos lidar com Side-Effects
A resposta rápida: Funções Puras
Mas o que elas são?
Qual a diferença entre as duas funções?
Funções Impuras
Dependem de estado externo
Possuem inputs e/ou outputs não declarados
O resultado da função é imprevisível
Funções Puras
Não dependem de estado externo
Possuem inputs e outputs declarados
O resultado da função é previsível
O que é então Programação Funcional?
Basicamente:
Escrever Funções Puras
Remover Inputs/Outputs escondidos
Diminuir os Side-Effects
Como usar?
Higher-Order Functions
Recursão
Functor
Composição
Currying
Higher-Order Functions
Funções que:
Aceitam outras funções como parâmetro
e/ou retornam outras funções
Higher-Order Functions
Funções que:
Aceitam outras funções como parâmetro
e/ou retornam outras funções
Higher-Order Functions
Funções que:
Aceitam outras funções como parâmetro
e/ou retornam outras funções
Recursão
Funções que invocam a si mesmas criando um loop
Functor
Um objeto que tem um método map
Composição
Combinar duas ou mais funções para gerar uma
nova
Currying
Transformar uma função com múltiplos parâmetros
em uma cadeia de funções que aceitam somente
um parâmetro e retornam outra função.
O que é uma linguagem funcional?
Toda linguagem que suporta funções puras é
funcional?
NÃO.
Então o que é uma linguagem funcional?
É aquela que suporta e encoraja a programação
sem Side-Effects.
Exemplos de linguagens funcionais
Erlang
Haskell
F#
Scala
Elixir
Empresas usando FP
Obrigado
Perguntas?

Más contenido relacionado

Destacado

POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA...
 POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA... POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA...
POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA...
Allyson Barros
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Adriano Teixeira de Souza
 
Programação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da ConsciênciaProgramação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da Consciência
Andrei Formiga
 

Destacado (18)

Angular js com diretivas
Angular js com diretivasAngular js com diretivas
Angular js com diretivas
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
 
Haskell
HaskellHaskell
Haskell
 
An Introduction to Functional Programming - DeveloperUG - 20140311
An Introduction to Functional Programming - DeveloperUG - 20140311An Introduction to Functional Programming - DeveloperUG - 20140311
An Introduction to Functional Programming - DeveloperUG - 20140311
 
Breve introdução a programação funcional com JavaScript
Breve introdução a programação funcional com JavaScriptBreve introdução a programação funcional com JavaScript
Breve introdução a programação funcional com JavaScript
 
POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA...
 POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA... POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA...
POTIGOLCODE: AMBIENTE DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO ATRAVÉS DA...
 
Plinio Balduino: JavaScript Funcional
Plinio Balduino: JavaScript FuncionalPlinio Balduino: JavaScript Funcional
Plinio Balduino: JavaScript Funcional
 
Pi1415 tudo
Pi1415 tudoPi1415 tudo
Pi1415 tudo
 
02 lógica de programaçoo tipos de dados, constantes e variáveis
02 lógica de programaçoo tipos de dados, constantes e variáveis02 lógica de programaçoo tipos de dados, constantes e variáveis
02 lógica de programaçoo tipos de dados, constantes e variáveis
 
Aula1
Aula1Aula1
Aula1
 
LEAN x Ágil
LEAN x ÁgilLEAN x Ágil
LEAN x Ágil
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Programação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da ConsciênciaProgramação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da Consciência
 
Aula 7 pc - estrutura
Aula 7   pc - estruturaAula 7   pc - estrutura
Aula 7 pc - estrutura
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming Fundamentals
 
Algoritmos e lp parte 5-subalgoritmos
Algoritmos e lp parte 5-subalgoritmosAlgoritmos e lp parte 5-subalgoritmos
Algoritmos e lp parte 5-subalgoritmos
 
Aula 04
Aula 04Aula 04
Aula 04
 
Aula 08
Aula 08Aula 08
Aula 08
 

Similar a Programação funcional

(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
Carlos Santos
 
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
Carlos Santos
 

Similar a Programação funcional (20)

Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdf
 
Aula05-JavaScript
Aula05-JavaScriptAula05-JavaScript
Aula05-JavaScript
 
Aula 4
Aula 4Aula 4
Aula 4
 
TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...
TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...
TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...
 
Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de erros
 
Pra quê servem monads?
Pra quê servem monads?Pra quê servem monads?
Pra quê servem monads?
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
 
Drupal 8 e ReactJS - DrupalCamp Campinas 2016
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Drupal 8 e ReactJS - DrupalCamp Campinas 2016
 
Java8
Java8Java8
Java8
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Aula 7 aed - sub algoritmos
Aula 7   aed - sub algoritmosAula 7   aed - sub algoritmos
Aula 7 aed - sub algoritmos
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Java14
Java14Java14
Java14
 
Php 7 do início ao profissional
Php 7  do início ao profissionalPhp 7  do início ao profissional
Php 7 do início ao profissional
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
 

Programação funcional