Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Explicando a composição

export const compose = (...fns) => value => 
    fns.reduceRight((previousValue, fn) =>
        fn(previousValue), value);

Eu escrevi da maneira mais reduzida o meu entendimento da execução do código acima, peço que por gentileza, me confirmem se estou certo, caso contrario peço a correção de você.

Segue:

As funções estão sendo executadas da direita para esquerda, por isso foi utilizado o reduceRight, e o resultado da execução de cada função vai ser passado para a seguinte (a sua esquerda), assim sucessivamente. value representa as notas, os dois parametros enviados para o reduce são, o primeiro representa o seu valor anterior, e o segundo é a função que está iterando ou seja, sendo executada no momento, a partir disso, eu vou pegar a função que está sendo executada (iterada), e passar o value como previousValue. Em nosso contexto, na primeira iteração de reduceRight, fn será a função getItemsFromNotas. Seu resultado será o previousValue passado para a função anterior e assim sucessivamente. Isso tudo ira retornar uma função que recebe um parâmetro apenas, no caso o sumItems.

2 respostas
solução!

Olá Henrique, tudo bem com você?

É isso ai mesmo!

Além do mais, é uma ótima tática escrever para ter certeza de quem entendeu essas funções, eu fiz a mesma coisa na época que estava aprendendo essa abordagem mais funcional de javascript :)

Agora vou fazer apenas uma pequena correção, que não tem muito haver com a ideia do compose, pois essa você entendeu corretamente, e sim com o reduce, que foi aqui:

Os dois parametros enviados para o reduce são, o primeiro representa o seu valor anterior, e o segundo é a função que está iterando
fns.reduceRight( 
    (previousValue, fn) => fn(previousValue), 
    value 
)

Eu entendi o que você quis dizer, mas na verdade os dois parâmetros do reduce são:

  1. Uma função de callback, no nosso caso é a (previousValue, fn) => fn(previousValue)

Então na verdade esses dois parâmetros, são da função callback que passamos como primeiro argumento do reduce

  1. Um valor inicial, em nosso caso é o value

E esse valor inicial que é super importante dado que ele será o argumento passado para a primeira função ( getItemFromNotas )!

Mas é só isso que tenho a acrescentar, parabéns :)

Abraços e Bons Estudos!

Boa tarde Geovani,

Confesso que esse paradigma funcional as vezes é meio embaraçoso, e eu o agradeço por ter me ajudado a entende-lo um pouco melhor.

Abraço.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software