1
resposta

[Bug] Exemplo com redundância

Acho que temos um problema no exemplo de código desta aula.

Da forma como está, estamos chamando de forma redundante o que está no threading last e a última linha:

(defn preco-total-do-produto [produto]
  (* (:quantidade produto) (:preco produto)))

(defn total-do-pedido
  [pedido]
  (->> pedido
       vals
       (map preco-total-do-produto)
       (reduce +))
  (reduce + (map preco-dos-produtos pedido)))

(println (total-do-pedido pedido))

Como deveria estar:

(defn preco-total-do-produto [produto]
  (* (:quantidade produto) (:preco produto)))

(defn total-do-pedido
  [pedido]
  (->> pedido
       vals
       (map preco-total-do-produto)
       (reduce +)))

(println (total-do-pedido pedido))
1 resposta

Olá, Lina!

Você está absolutamente correta. A redundância que você apontou no exemplo de código é um erro. A função total-do-pedido está chamando duas vezes a operação de redução com mapeamento, uma vez utilizando a função preco-total-do-produto (que é a correta) e outra vez com a função preco-dos-produtos (que já foi substituída).

O código corrigido ficaria assim:

(defn preco-total-do-produto [produto]
  (* (:quantidade produto) (:preco produto)))

(defn total-do-pedido
  [pedido]
  (->> pedido
       vals
       (map preco-total-do-produto)
       (reduce +)))

(println (total-do-pedido pedido))

Obrigada por apontar esse erro! Isso ajuda a melhorar a qualidade do curso. Espero ter ajudado e bons estudos!