Expressão do no Clojure
A expressão do é utilizada para agrupar múltiplas expressões em um único bloco que é tratado como uma única expressão.
O do avalia cada uma das expressões fornecidas em sequência e o valor de retorno é invariavelmente o resultado da última expressão avaliada.
O propósito principal do do é permitir a execução de efeitos colaterais antes de retornar um valor final.
NOTE
Em um paradigma puramente funcional, se não houver efeitos colaterais, múltiplas expressões seriam redundantes, pois apenas o resultado final de um conjunto de expressões é retornado ao chamador.
Blocos de Execução no if
A expressão if possui uma restrição sintática onde aceita apenas uma única expressão para o ramo “then” e uma única para o “else”.
Para executar mais de uma ação em um dos ramos, é obrigatório o uso do do para encapsular as ações. Isso pode ser necessário ao trabalhar com macros, por exemplo, como mostrado nesse vídeo.
Exemplo:
(if (even? 5)
(do (println "even") ; Efeito colateral
true) ; Valor de retorno
(do (println "odd") ; Efeito colateral
false)) ; Valor de retorno