Expressão cond no Clojure
A expressão cond (abreviação de conditional) é utilizada para avaliar uma série de testes lógicos, permitindo tratar múltiplas ramificações de forma mais organizada do que o aninhamento manual de múltiplos if.
O cond recebe uma sequência de pares, onde o primeiro elemento é um teste e o segundo é a expressão a ser executada caso o teste seja verdadeiro.
Os testes são processados na ordem em que foram escritos. A primeira expressão cujo teste resultar em um valor verdadeiro é avaliada e seu resultado é retornado.
(defn categorizar [n]
(cond
(< n 0) "Negativo" ; Par 1: Teste -> Expressão
(< n 10) "Pequeno" ; Par 2: Teste -> Expressão
(< n 100) "Médio" ; Par 3: Teste -> Expressão
:else "Grande")) ; Par 4: Default (sempre true)
(categorizar 5) ;; => "Pequeno"
(categorizar 50) ;; => "Médio"
(categorizar -1) ;; => "Negativo"Retorno Padrão: Se nenhum dos testes for satisfeito, o cond retorna nil.
(let [idade 15]
(cond
(>= idade 18) "Adulto"
(>= idade 65) "Idoso"))
;; => nil (15 não é >= 18 nem >= 65)Avaliação de curto-circuito
Uma vez que um teste é satisfeito, nenhum dos testes subsequentes é avaliado.
(let [x 5]
(cond
(= x 5) "Encontrou o 5!"
(do (println "Isso nunca será impresso") (= x 5)) "Ainda é 5"
:else "Nada"))
;; => "Encontrou o 5!"NOTE
O console ficará limpo, pois o segundo teste nunca foi executado.