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

Referências


https://clojure.org/guides/learn/flow#_if_and_do

https://youtu.be/iDowewUURjs?si=xHqtuTj7U3SW0i0U&t=1077