Código como dados
A coisa mais notável que você pode notar ao chegar ao Clojure vindo de Java é que ele é homoicônicoo que significa que o código é escrito na forma das estruturas de dados da linguagem. Essa prática, também conhecida como código como dadosresulta em uma sintaxe muito consistente com um número limitado de palavras-chave e construções. Ele também cria um modelo de metaprogramação usando modelos de código “com reconhecimento de sintaxe” (chamados macros).
A ideia é que qualquer trecho de código Clojure também seja uma instância dos dados Clojure. Você verá isso com mais frequência na sintaxe da lista, porque a maior parte do Clojure é escrita como listas. Aqui está uma função simples “Hello, InfoWorld” no Clojure:
(defn hello-infoworld ()
(println "Hello, InfoWorld"))
Os parênteses indicam uma lista no Clojure. Portanto, a definição desta função é essencialmente apenas a definição de uma lista com uma palavra-chave (defn), um nome de função (hello-infoworld), um vetor de argumento vazio (()) e o corpo da função. O corpo da função também é uma lista contendo uma chamada de função (println) e o argumento para essa função (“Hello, InfoWorld”).
