JS FUNCIONALCOM RAMDA
View Slide
Olar!Meu nome é Ana BastosSou engenheira de softwareno Nubank e cientista dacomputação pela PUC-SP.2anabastos@naluhh@anapbastos
3
Apresentar uma nova forma de pensar em JS euma possível ferramenta utilitária.
Muito tempo atrás…Que na verdade não é tanto tempo atrásassim...
IndexOf2009(ES5)
ver se um elementos estádentro de uma lista2009(ES5)
!!~arr.indexOf(x)
Includes2016(ES7)
loops js
mapfilterreduceforEacheverysomefind
ABSTRAÇÕESProvêm ferramental com melhorvalor algorítmico que podesalvar linhas de código, tempo ebugs além de deixar as coisasmais legíveis.
HELPERS
ES6ES7ES8ES9??????
RAMDALODASH/FP
Bibliotecas pensadaspara tornar mais fácilo javascript funcional
JS vem aos poucosadotando elementosde linguagensfuncionais
Partial ApplicationPipeline operatorPattern MatchingFlatmapPROPOSALS
RAMDA ÉDIFERENTE
DAY 0
Te força implementar conceitosfuncionais direito de forma bonita ebem fundamentada
IMUTABILIDADE
Pequenas funções puras reusáveis com apenas umaresponsabilidade
SÓ FUNÇÕES
● 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)
PQ PODE SER UMABOA IDEIA?
Evita caca(Pureza / Mutabilidade)É mais produtivo(reuso)Ajuda a ler codigoAjuda muito a testarFaz muito sentido no front-end
Lida com undefineds / nulls
doSomething(obj.prop)
O PULO DO GATO
CURRY
TODA FUNCAO UNÁRIA
TODAS AS FUNCÕES SÃOCURRIED
Aplica os parametros daesquerda pra direitaquando você tem eles
PROPOSAL PARTIAL APPLICATIONhttps://github.com/tc39/proposal-partial-application
A ordem dos argumentos são para facilitar o dado a ser operado mais na direita
Funções <=Dado =>
Cond(Pattern Matching)If () {If () {if() {if() {}}}Else {If () {}}}
Cond(Pattern Matching)
PATTERN MATCHING PROPOSALhttps://github.com/tc39/proposal-pattern-matching
Como se modela coisas?
PIPES
PIPELINE OPERATOR PROPOSALhttps://github.com/tc39/proposal-pipeline-operator
function1function2INPUT OUTPUTOUTPUT
ComposedFunctionINPUTOUTPUT
[5, 5, 4, 6]Média com ponto departicipação deve sermaior ou igual a 5
POINT-FREEPROGRAMMING
PIPECOMPOSE
HOF (Recompose)
PIPEP / COMPOSEP
then(a).then(b).then(c).then(d)
await a()await b()await c()await d()
BIBLIOTECA DOFUTURO DO JS
HIGHLIGHTS
Perguntei pra amigos meus o que elesusam e as respostas foram bemdiferentes
APLICAÇÃO PARCIAL EM TESTES
EVOLVEAPPLYSPECDIFFERENCEUNIQPROP
LENSES(Lidar com estado)MEMOIZATION(Lidar comrecursão)
WARNINGS /APRENDIZADOS
● Cuidado com o RamdaScript● Legibilidade do projeto● Anti-OpenSource● Isole o RamdaFucks(ramdaUtils)
COOKBOOK
● 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-getting-started● Ramda - Derek Stavis(Pagar.me talks)● Hey Underscore, You’re doing it wrong - Brian Lonsdorf.
Obrigada!anabastos@naluhh@anapbastos81speakerdeck.com/anabastos