Last active
October 21, 2016 19:42
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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