programação funcional
TRANSCRIPT
Programação FuncionalKickoff Web 2016
Programação Funcional
O que éQuais problemas resolveComo usarO que é uma linguagem funcionalUso nas empresas
Inputs/Outputs de Funções
Toda função possui inputs e outputs:
Input: int xOutput: int
Inputs/Outputs de Funções
Toda função possui inputs e outputs:
Input: hiddenOutput: 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 internamenteTrazer toda complexidade pra cimaIgnorar e torcer pro melhor dos cenários
Ignorar geralmente leva a grandes problemas
Então Side-Effects são ruins?
Mais difícil de debugarMais difícil de testarTemos 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 PurasMas o que elas são?
Qual a diferença entre as duas funções?
Funções Impuras
Dependem de estado externoPossuem inputs e/ou outputs não declaradosO resultado da função é imprevisível
Funções Puras
Não dependem de estado externoPossuem inputs e outputs declaradosO resultado da função é previsível
O que é então Programação Funcional?
Basicamente:Escrever Funções PurasRemover Inputs/Outputs escondidosDiminuir os Side-Effects
Como usar?
Higher-Order FunctionsRecursãoFunctorComposiçãoCurrying
Higher-Order Functions
Funções que:Aceitam outras funções como parâmetroe/ou retornam outras funções
Higher-Order Functions
Funções que:Aceitam outras funções como parâmetroe/ou retornam outras funções
Higher-Order Functions
Funções que:Aceitam outras funções como parâmetroe/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
ErlangHaskellF#ScalaElixir
Empresas usando FP
ObrigadoPerguntas?