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?

Programação funcional