Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CODECASTS: Talk - Programação Funcional Direto ao Ponto - Vinicius Reis

CODECASTS: Talk - Programação Funcional Direto ao Ponto - Vinicius Reis

Vinicius Reis

December 19, 2016
Tweet

More Decks by Vinicius Reis

Other Decks in Programming

Transcript

  1. Programação Funcional
    Direto ao Ponto
    Principais pontos para começar a usar FP hoje

    View Slide

  2. Vinicius Reis
    @vinicius73
    @LuizVinicius73
    Gravo aulas sobre Vue.js, Javascript e Laravel para codecasts.com.br
    Engenheiro de Aplicações @ Decision6

    View Slide

  3. Breve História

    View Slide

  4. Breve História
    - Veio um antes da Orientação a Objetos (~1950)
    - FP naturalmente gasta mais memória, e memória era muito cara nos anos 50
    - Devido aos custos, a Programação imperativa + OOP se popularizou muito.

    View Slide

  5. Por que voltou?

    View Slide

  6. Por que voltou?
    - Memórias se tornaram baratas
    - Gasta menos processamento
    - Paralelismo é simples
    - Maiores abstrações, menos bugs

    View Slide

  7. Por que voltou?
    Memória não é mais um problema, processamento sim.
    Poder de processamento é algo finito, a única maneira de tornar ele “infinito” é
    com paralelismo.
    OOP é péssimo para paralelismo, pois ele precisa manter o estado dos objetos.
    FP trabalha com imutabilidade, assim processos podem ser feitos em várias
    máquinas com pouco esforço.

    View Slide

  8. Quais as linguagens de FP temos hoje?

    View Slide

  9. Quais as linguagens de FP temos hoje?
    - Lisp
    - Haskel
    - Rust
    - Elixir
    - Erlang
    - Clojure
    - Scala
    Essa são só algumas das que mais
    chama a atenção.

    View Slide

  10. Onde está o JavaScript?

    View Slide

  11. Onde está o JavaScript?
    JavaScript não é uma linguagem puramente funcional.
    FP está entre os muitos paradigmas que é possível implementar nele.
    Por não ser “naturalmente funcional” escrever de maneira funcional no
    JavaScript deve partir do desenvolvedor.

    View Slide

  12. Princípios

    View Slide

  13. Princípios
    - Funções de Primeira-classe (First-class Functions)
    - Funções de Primeira-ordem (Higher-order Functions)
    - Funções Puras
    - Imutabilidade

    View Slide

  14. Funções de Primeira-classe (First-class Functions)
    Quando uma linguagem permite tratar funções como valores
    - Atribuindo a variáveis
    - Aceitar como argumentos de outras funções
    - Permite retornar funções como resultado de outras funções

    View Slide

  15. Funções de Primeira-classe (First-class Functions)

    View Slide

  16. Funções de Primeira-classe (First-class Functions)

    View Slide

  17. Funções de Primeira-ordem (Higher-order Functions)
    É uma função permite receber ou retornar funções
    (Alguém lembrou de callbacks?)

    View Slide

  18. Funções de Primeira-ordem (Higher-order Functions)

    View Slide

  19. Funções Puras
    - São funções sem efeitos colaterais (side effects), sejam na memória ou I/O
    - Uma função pura terá sempre o mesmo retorno para a mesma entrada.
    - É muito fácil criar funções com efeitos colaterais, é preciso estar atento.
    - Estão diretamente ligadas a funções matemáticas

    View Slide

  20. Funções Puras
    Funções puras conversão diretamente com a imutabilidade.
    Um software feito com funções puras é muito mais fácil de manter, localizar
    bugs e corrigi-los é extremamente simples.
    São exemplos de funções puras:
    - Array.prototype.map
    - Array.prototype.filter
    - Array.prototype.reduce

    View Slide

  21. Funções Puras
    IMPURO/MUTÁVEL

    View Slide

  22. Funções Puras
    PURO

    View Slide

  23. Funções Puras
    PURO

    View Slide

  24. Funções Puras
    PURO/MUTÁVEL

    View Slide

  25. Imutabilidade
    - Caminha lado-a-lado com as funções puras.
    - Uma variável não muda de valor após sua atribuição
    - Não é algo difícil, apenas exige uma mudança de pensamento
    - Consome mais memória, pois você está trabalhando com cópias não com
    referências.
    - Permite paralelismo
    O conceito de imutabilidade pode parecer controverso e talvez impossível, mas
    é bem simples uma vez que você se propõe a isso.

    View Slide

  26. Imutabilidade
    IMPURO/MUTÁVEL

    View Slide

  27. Imutabilidade
    PURO/IMUTÁVEL

    View Slide

  28. Imutabilidade
    PURO/IMUTÁVEL

    View Slide

  29. De volta aos princípios

    View Slide

  30. Princípios
    - Funções de Primeira-classe (First-class Functions)
    - Funções de Primeira-ordem (Higher-order Functions)
    - Funções Puras
    - Imutabilidade
    - Recursividade
    - Currying
    - Compose (Function composition)

    View Slide

  31. Recursividade
    Quando uma função invoca ela mesma, criando um loop.
    JavaScript possui um limite para a recursividade, cada navegador estabelece um
    número.
    Isso acontece pois o stack de processos fica “cheio” podendo travar a máquina do
    usuário.
    Algumas linguagens implementam tail call optimized, isto já está previsto no
    ES2015+, porém os navegadores ainda não implementaram.

    View Slide

  32. Recursividade

    View Slide

  33. Recursividade

    View Slide

  34. Currying
    Currying é uma técnica que permite:
    “passar argumentos parcialmente para uma função”
    Se uma função precisa de 3 argumentos para ser executada, ao passar um
    argumento para ela, o resultado será uma nova função que aceita dois
    argumentos.
    Esse processo se repete até que todos os argumentos tenham sido passados.

    View Slide

  35. Currying

    View Slide

  36. Currying

    View Slide

  37. Currying
    JavaScript não possui currying por padrão, é preciso o uso de funções de apoio

    View Slide

  38. Dados a direita
    É importante observar que muitas vezes (não sempre) em programação
    funcional os dados ficam do direito, como últimos argumentos.
    Se não fosse assim o currying não faria muito sentido.

    View Slide

  39. Compose (Function composition)
    Composição de funções é uma técnica que permite criar uma nova função a
    partir da combinação de outras funções
    O resultado de uma função é passado como argumento para a próxima função,
    até que todas as funções tenham sido executadas.
    Também é conhecido como pipe-line de funções

    View Slide

  40. Compose (Function composition)
    JavaScript não possui isso por padrão, sem o uso de libs de apoio temos que
    fazer manualmente:

    View Slide

  41. Compose (Function composition)
    Usando funções de apoio:

    View Slide

  42. São técnicas não regras

    View Slide

  43. São técnicas não regras
    Não são todas as linguagens funcionais que implementam essas técnicas ou
    regras.
    Programação funcional acima de tudo é uma metodologia.
    Mesmo em linguagens sem suporte ou com suporte baixo, é possível tirar
    proveito dessas técnicas.

    View Slide

  44. São técnicas não regras
    Você não precisa usar tudo isso de uma vez.
    Já ficou claro que você já usa muita coisa de FP sem saber, só precisa começar a
    usar mais, e consciente do uso.
    Com o tempo pode incorporar bibliotecas como o Ramda.js que te ajudam e
    forçam a escrever de maneira totalmente funcional.

    View Slide

  45. Obrigado

    View Slide