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

TDC Porto Alegre 2019 - JS Funcional com Ramda

TDC Porto Alegre 2019 - JS Funcional com Ramda

Ana Luiza Portello

November 29, 2019
Tweet

More Decks by Ana Luiza Portello

Other Decks in Programming

Transcript

  1. JS FUNCIONAL
    COM RAMDA

    View Slide

  2. Olar!
    Meu nome é Ana Bastos
    Sou engenheira de software
    no Nubank e cientista da
    computação pela PUC-SP.
    2
    anabastos
    @naluhh
    @anapbastos

    View Slide

  3. 3

    View Slide

  4. Apresentar uma nova forma de pensar em JS e
    uma possível ferramenta utilitária.

    View Slide

  5. Muito tempo atrás…
    Que na verdade não é tanto tempo atrás
    assim...

    View Slide

  6. IndexOf
    2009(ES5)

    View Slide

  7. ver se um elementos está
    dentro de uma lista
    2009(ES5)

    View Slide

  8. View Slide

  9. !!~arr.indexOf(x)

    View Slide

  10. Includes
    2016(ES7)

    View Slide

  11. loops js

    View Slide

  12. map
    filter
    reduce
    forEach
    every
    some
    find

    View Slide

  13. ABSTRAÇÕES
    Provêm ferramental com melhor
    valor algorítmico que pode
    salvar linhas de código, tempo e
    bugs além de deixar as coisas
    mais legíveis.

    View Slide

  14. HELPERS

    View Slide

  15. ES6
    ES7
    ES8
    ES9
    ??????

    View Slide

  16. RAMDA
    LODASH/FP

    View Slide

  17. Bibliotecas pensadas
    para tornar mais fácil
    o javascript funcional

    View Slide

  18. JS vem aos poucos
    adotando elementos
    de linguagens
    funcionais

    View Slide

  19. Partial Application
    Pipeline operator
    Pattern Matching
    Flatmap
    PROPOSALS

    View Slide

  20. RAMDA É
    DIFERENTE

    View Slide

  21. DAY 0

    View Slide

  22. Te força implementar conceitos
    funcionais direito de forma bonita e
    bem fundamentada

    View Slide

  23. IMUTABILIDADE

    View Slide

  24. Pequenas funções puras reusáveis com apenas uma
    responsabilidade

    View Slide

  25. SÓ FUNÇÕES

    View Slide

  26. View Slide

  27. ● Lists(map, filter, reduce, contains, replace,
    passAll, crop, flatten, find)
    ● Maths(inc, add, mean, sum)
    ● String(split, replace)
    ● Logics(equals, cond, not)
    ● Relations(intersection, clamp, gt, lt)
    ● Functions(curry, pipe, compose, ifElse, etc)

    View Slide

  28. PQ PODE SER UMA
    BOA IDEIA?

    View Slide

  29. Evita caca(Pureza / Mutabilidade)
    É mais produtivo(reuso)
    Ajuda a ler codigo
    Ajuda muito a testar
    Faz muito sentido no front-end

    View Slide

  30. Lida com undefineds / nulls

    View Slide

  31. doSomething(obj.prop)

    View Slide

  32. View Slide

  33. View Slide

  34. O PULO DO GATO

    View Slide

  35. CURRY

    View Slide

  36. View Slide

  37. TODA FUNCAO UNÁRIA

    View Slide

  38. TODAS AS FUNCÕES SÃO
    CURRIED

    View Slide

  39. View Slide

  40. View Slide

  41. View Slide

  42. Aplica os parametros da
    esquerda pra direita
    quando você tem eles

    View Slide

  43. PROPOSAL PARTIAL APPLICATION
    https://github.com/tc39/proposal-partial-application

    View Slide

  44. View Slide

  45. A ordem dos argumentos são para facilitar o dado a ser operado mais na direita

    View Slide

  46. View Slide

  47. Funções <=
    Dado =>

    View Slide

  48. Cond(Pattern Matching)
    If () {
    If () {
    if() {
    if() {
    }
    }
    }
    Else {
    If () {
    }
    }
    }

    View Slide

  49. Cond(Pattern Matching)

    View Slide

  50. Cond(Pattern Matching)

    View Slide

  51. PATTERN MATCHING PROPOSAL
    https://github.com/tc39/proposal-pattern-matching

    View Slide

  52. Como se modela coisas?

    View Slide

  53. PIPES

    View Slide

  54. PIPELINE OPERATOR PROPOSAL
    https://github.com/tc39/proposal-pipeline-operator

    View Slide

  55. function
    1
    function
    2
    INPUT OUTPUT
    OUTPUT

    View Slide

  56. View Slide

  57. Composed
    Function
    INPUT
    OUTPUT

    View Slide

  58. [5, 5, 4, 6]
    Média com ponto de
    participação deve ser
    maior ou igual a 5

    View Slide

  59. View Slide

  60. POINT-FREE
    PROGRAMMING

    View Slide

  61. View Slide

  62. View Slide

  63. PIPE
    COMPOSE

    View Slide

  64. View Slide

  65. HOF (Recompose)

    View Slide

  66. PIPEP / COMPOSEP

    View Slide

  67. then(a)
    .then(b)
    .then(c)
    .then(d)

    View Slide

  68. await a()
    await b()
    await c()
    await d()

    View Slide

  69. View Slide

  70. BIBLIOTECA DO
    FUTURO DO JS

    View Slide

  71. HIGHLIGHTS

    View Slide

  72. Perguntei pra amigos meus o que eles
    usam e as respostas foram bem
    diferentes

    View Slide

  73. APLICAÇÃO PARCIAL EM TESTES

    View Slide

  74. EVOLVE
    APPLYSPEC
    DIFFERENCE
    UNIQ
    PROP

    View Slide

  75. LENSES(Lidar com estado)
    MEMOIZATION(Lidar com
    recursão)

    View Slide

  76. View Slide

  77. WARNINGS /
    APRENDIZADOS

    View Slide

  78. ● Cuidado com o RamdaScript
    ● Legibilidade do projeto
    ● Anti-OpenSource
    ● Isole o RamdaFucks(ramdaUtils)

    View Slide

  79. COOKBOOK

    View Slide

  80. ● Rambda - github.com/selfrefactor/rambda
    ● Ramda-fantasy - github.com/ramda/ramda-fantasy
    ● Ramda React Redux Patterns -
    tommmyy.github.io/ramda-react-redux-patterns/
    ● Thinking Ramda -
    randycoulman.com/blog/2016/05/24/thinking-in-ramda-gett
    ing-started
    ● Ramda - Derek Stavis(Pagar.me talks)
    ● Hey Underscore, You’re doing it wrong - Brian Lonsdorf.

    View Slide

  81. Obrigada!
    anabastos
    @naluhh
    @anapbastos
    81
    speakerdeck.com/anabastos

    View Slide