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

CODECASTS: Talk - Programação Funcional Direto ...

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. Vinicius Reis @vinicius73 @LuizVinicius73 Gravo aulas sobre Vue.js, Javascript e

    Laravel para codecasts.com.br Engenheiro de Aplicações @ Decision6
  2. 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.
  3. Por que voltou? - Memórias se tornaram baratas - Gasta

    menos processamento - Paralelismo é simples - Maiores abstrações, menos bugs
  4. 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.
  5. 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.
  6. 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.
  7. Princípios - Funções de Primeira-classe (First-class Functions) - Funções de

    Primeira-ordem (Higher-order Functions) - Funções Puras - Imutabilidade
  8. 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
  9. Funções de Primeira-ordem (Higher-order Functions) É uma função permite receber

    ou retornar funções (Alguém lembrou de callbacks?)
  10. 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
  11. 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
  12. 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.
  13. 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)
  14. 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.
  15. 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.
  16. 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.
  17. 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
  18. Compose (Function composition) JavaScript não possui isso por padrão, sem

    o uso de libs de apoio temos que fazer manualmente:
  19. 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.
  20. 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.