Skip to content

Instantly share code, notes, and snippets.

@geraldodev
Last active October 21, 2016 19:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geraldodev/234633c35deb4c6e1ece44cb0a6ed893 to your computer and use it in GitHub Desktop.
Save geraldodev/234633c35deb4c6e1ece44cb0a6ed893 to your computer and use it in GitHub Desktop.
mostra exemplo de comp e sua ordem de execução da direita pra esquerda. E a diferença da ordem de execução quando usamos transducer
;; observe que funciona (ordem direita pra esquerda
;; (str (inc 2)) faz sentido né
((comp str inc) 2)
;; porque nao funciona
((comp inc str) 2)
;; rode este pro debaixo ser possível
(def options-map {
"3" {:code "3" :label "tres"}
"4" {:code "4" :label "quatro"}})
;; preste atenção na ordem, veja a diferença do comp q funcionou com a ordem da esquerda pra direita
;; Caso especial do comp com transucer
(into []
(comp
(map #(get options-map %)) ;; observe que não há 5 no mapa entao vai retornar nil
(filter identity)) ;; filter identity vai retornar apenas os nao nulos
["3" "4" "5"])
;; tranducer é mto importante pra encadear computação sem alocar memoria pra todos os passos que fazemos
;; no caso tem dois passos aqui mas desacoplamos a estrutura pra onde vai a computação da computação
;; Conhecimento mto importante pra quem quer fazer computações eficientes em clojure
;; http://clojure.org/reference/transducers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment