REPL: seu melhor amigo no mundo Clojure
Arthur Fücher
Posted on February 8, 2023
Nos textos anteriores para validar a instalação e configuração do ambiente eu comentei sobre o REPL, quando rodava o comando clj
ou lein repl
. Vamos então descobrir o que é e para que serve o REPL.
REPL
REPL (eu falo répou) é um acrônimo para Read-Eval-Print Loop. Fazendo uma tradução livre seria um laço de leitura-execução-impressão.
É uma ferramenta de interação onde é possível executar códigos da linguagem, facilitando o desenvolvimento, uma validação de função, entre outros.
Um exemplo de REPL de javascript é o console do navegador, nele você consegue escrever uma instrução em javascript, o navegador então irá:
- Ler a instrução que você colocou;
- Executar a instrução;
- Imprimir o resultado da instrução;
Depois disso ficará esperando uma nova instrução e repetirá o processo, ficando num laço eterno.
Diversas linguagens possuem isso e é uma excelente forma de começar a aprender a linguagem.
Na prática
Abra o REPL rodando o comando lein repl
no terminal.
Se não tiver o Leiningen instalado, sugiro dar uma lida no Leinigen: Configurando ambiente dev para Clojure, que lá explico passo-a-passo como instalar.
Uma vez executado, irá nos mostrar algumas informações como versão do Clojure e da JDK, e também sobre um servidor nREPL. Por enquanto podemos ignorar o nREPL, mas sim é possível conectar de remoto nesse REPL 🤯
Olá, mundo!
O REPL agora está parado no laço aguardando uma instrução para executar e imprimir o resultado. Vamos fazer um pequeno teste para ver como funciona.
Por enquanto não repare na sintaxe ou qualquer aspecto da linguagem, o foco é o REPL.
Para começar que tal o famoso Hello world!
? Para isso execute o seguinte código no REPL (pprint "Hello world!")
e vamos analisar a saída:
user=> (println "Hello world!") #READ
Hello world! #EVAL
nil #PRINT
user=> #LOOP
É possível ver todo o laço, primeiro ele lê a entrada da nossa instrução, e em seguida executa o código que nesse caso é para imprimir o texto "Hello world!". Depois o nil
pode ser confuso, mas é a impressão do resultado da execução, que nesse caso é nulo dado que esse é o retorno da chamada do println
. E no final volta para o estado de esperar a próxima execução.
Agora vamos executar uma instrução que não imprima nada, como no caso anterior. Vamos somar 1 e 1 usando o código (+ 1 1)
:
user=> (+ 1 1) #READ
2 #(EVAL) PRINT
user=> #LOOP
Nesse exemplo o passo de executar o código não aparece, pois a soma é feita em memória. Mas depois conseguimos checar que no terminal é impresso o resultado da soma 2
.
Eai, o que achou? O REPL é excelente para conhecer funções e estruturas de dados em Clojure. Veja a documentação do println e tente outras funções.
Caso queira se aprofundar, existem conteúdos também sobre REPL Driven Development bem interessantes! Sugiro a palestra REPL Driven Development, Clojure's Superpower - Sean Corfield (em inglês)
Abraços, e até uma próxima!
Posted on February 8, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.