programação funcional

26
Programação Funcional Kickoff Web 2016

Upload: matheus-lima

Post on 13-Apr-2017

780 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Programação funcional

Programação FuncionalKickoff Web 2016

Page 2: Programação funcional

Programação Funcional

O que éQuais problemas resolveComo usarO que é uma linguagem funcionalUso nas empresas

Page 3: Programação funcional

Inputs/Outputs de Funções

Toda função possui inputs e outputs:

Input: int xOutput: int

Page 4: Programação funcional

Inputs/Outputs de Funções

Toda função possui inputs e outputs:

Input: hiddenOutput: hidden

Page 5: Programação funcional

Inputs/Outputs de Funções

Inputs e/ou outputs escondidos, requerem e fazem coisas que não sabemos apenas lendo sua API.

Page 6: Programação funcional

Inputs/Outputs de Funções

E isso tem um nome: Side-Effects

Page 7: Programação funcional

Side-Effects

Podemos ver uma função como essa:

E pensarmos que temos alguma ideia do que ela faz, mas estaremos errados!

Page 8: Programação funcional

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

Page 9: Programação funcional

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

Page 10: Programação funcional

Como podemos lidar com Side-Effects

A resposta rápida: Funções PurasMas o que elas são?

Page 11: Programação funcional

Qual a diferença entre as duas funções?

Page 12: Programação funcional

Funções Impuras

Dependem de estado externoPossuem inputs e/ou outputs não declaradosO resultado da função é imprevisível

Page 13: Programação funcional

Funções Puras

Não dependem de estado externoPossuem inputs e outputs declaradosO resultado da função é previsível

Page 14: Programação funcional

O que é então Programação Funcional?

Basicamente:Escrever Funções PurasRemover Inputs/Outputs escondidosDiminuir os Side-Effects

Page 15: Programação funcional

Como usar?

Higher-Order FunctionsRecursãoFunctorComposiçãoCurrying

Page 16: Programação funcional

Higher-Order Functions

Funções que:Aceitam outras funções como parâmetroe/ou retornam outras funções

Page 17: Programação funcional

Higher-Order Functions

Funções que:Aceitam outras funções como parâmetroe/ou retornam outras funções

Page 18: Programação funcional

Higher-Order Functions

Funções que:Aceitam outras funções como parâmetroe/ou retornam outras funções

Page 19: Programação funcional

Recursão

Funções que invocam a si mesmas criando um loop

Page 20: Programação funcional

Functor

Um objeto que tem um método map

Page 21: Programação funcional

Composição

Combinar duas ou mais funções para gerar uma nova

Page 22: Programação funcional

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.

Page 23: Programação funcional

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.

Page 24: Programação funcional

Exemplos de linguagens funcionais

ErlangHaskellF#ScalaElixir

Page 25: Programação funcional

Empresas usando FP

Page 26: Programação funcional

ObrigadoPerguntas?