Clojure - Macros
Em qualquer idioma, Macrossão usados para gerar código embutido. Clojure não é exceção e fornece recursos de macro simples para desenvolvedores. As macros são usadas para escrever rotinas de geração de código, que fornecem ao desenvolvedor uma maneira poderosa de adaptar a linguagem às necessidades do desenvolvedor.
A seguir estão os métodos disponíveis para macros.
defmacro
Esta função é usada para definir sua macro. A macro terá um nome de macro, uma lista de parâmetros e o corpo da macro.
Sintaxe
A seguir está a sintaxe.
(defmacro name [params*] body)
Parameters- 'nome' é o nome da macro. 'params' são os parâmetros atribuídos à macro. 'corpo' é o corpo da macro.
Return Value - Nenhum.
Exemplo
Um exemplo de como isso é usado é mostrado no programa a seguir.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Resultado
O programa acima produz a seguinte saída.
Hello
No programa acima, você pode ver que a macro 'Simples' é expandida em linha para 'println' “Olá”. Macros são semelhantes a funções, com a única diferença de que os argumentos para um formulário são avaliados no caso de macros.
macro-expansão
Isso é usado para expandir uma macro e colocar o código embutido no programa.
Sintaxe
A seguir está a sintaxe.
(macroexpand macroname)
Parameters - 'macroname' é o nome da macro que precisa ser expandida.
Return Value - A macro expandida.
Exemplo
Um exemplo de como isso é usado é mostrado no programa a seguir.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
Resultado
O programa acima produz a seguinte saída.
Hello
Macro com Argumentos
As macros também podem ser usadas para aceitar argumentos. A macro pode receber qualquer número de argumentos. O exemplo a seguir mostra como os argumentos podem ser usados.
Exemplo
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple [arg]
(list 2 arg))
(println (macroexpand '(Simple 2))))
(Example)
O exemplo acima coloca um argumento na macro Simples e usa o argumento para adicionar o valor do argumento a uma lista.
Resultado
O programa acima produz a seguinte saída.
(2 2)