TDC Porto Alegre 2019 - JS Funcional com Ramda

TDC Porto Alegre 2019 - JS Funcional com Ramda

Fcfcfbcdbe8543b6d76c7566d6e1693c?s=128

Ana Luiza Portello

November 29, 2019
Tweet

Transcript

  1. JS FUNCIONAL COM RAMDA

  2. Olar! Meu nome é Ana Bastos Sou engenheira de software

    no Nubank e cientista da computação pela PUC-SP. 2 anabastos @naluhh @anapbastos
  3. 3

  4. Apresentar uma nova forma de pensar em JS e uma

    possível ferramenta utilitária.
  5. Muito tempo atrás… Que na verdade não é tanto tempo

    atrás assim...
  6. IndexOf 2009(ES5)

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

  8. None
  9. !!~arr.indexOf(x)

  10. Includes 2016(ES7)

  11. loops js

  12. map filter reduce forEach every some find

  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.
  14. HELPERS

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

  16. RAMDA LODASH/FP

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

  18. JS vem aos poucos adotando elementos de linguagens funcionais

  19. Partial Application Pipeline operator Pattern Matching Flatmap PROPOSALS

  20. RAMDA É DIFERENTE

  21. DAY 0

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

    bem fundamentada
  23. IMUTABILIDADE

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

  25. SÓ FUNÇÕES

  26. None
  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)
  28. PQ PODE SER UMA BOA IDEIA?

  29. Evita caca(Pureza / Mutabilidade) É mais produtivo(reuso) Ajuda a ler

    codigo Ajuda muito a testar Faz muito sentido no front-end
  30. Lida com undefineds / nulls

  31. doSomething(obj.prop)

  32. None
  33. None
  34. O PULO DO GATO

  35. CURRY

  36. None
  37. TODA FUNCAO UNÁRIA

  38. TODAS AS FUNCÕES SÃO CURRIED

  39. None
  40. None
  41. None
  42. Aplica os parametros da esquerda pra direita quando você tem

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

  44. None
  45. A ordem dos argumentos são para facilitar o dado a

    ser operado mais na direita
  46. None
  47. Funções <= Dado =>

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

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

  50. Cond(Pattern Matching)

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

  52. Como se modela coisas?

  53. PIPES

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

  55. function 1 function 2 INPUT OUTPUT OUTPUT

  56. None
  57. Composed Function INPUT OUTPUT

  58. [5, 5, 4, 6] Média com ponto de participação deve

    ser maior ou igual a 5
  59. None
  60. POINT-FREE PROGRAMMING

  61. None
  62. None
  63. PIPE COMPOSE

  64. None
  65. HOF (Recompose)

  66. PIPEP / COMPOSEP

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

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

  69. None
  70. BIBLIOTECA DO FUTURO DO JS

  71. HIGHLIGHTS

  72. Perguntei pra amigos meus o que eles usam e as

    respostas foram bem diferentes
  73. APLICAÇÃO PARCIAL EM TESTES

  74. EVOLVE APPLYSPEC DIFFERENCE UNIQ PROP

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

  76. None
  77. WARNINGS / APRENDIZADOS

  78. • Cuidado com o RamdaScript • Legibilidade do projeto •

    Anti-OpenSource • Isole o RamdaFucks(ramdaUtils)
  79. COOKBOOK

  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.
  81. Obrigada! anabastos @naluhh @anapbastos 81 speakerdeck.com/anabastos