REPL: seu melhor amigo no mundo Clojure

afucher

Arthur Fücher

Posted on February 8, 2023

REPL: seu melhor amigo no mundo Clojure

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 🤯
terminal com a execução do 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
Enter fullscreen mode Exit fullscreen mode

É 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
Enter fullscreen mode Exit fullscreen mode

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!

💖 💪 🙅 🚩
afucher
Arthur Fücher

Posted on February 8, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

REPL: seu melhor amigo no mundo Clojure
beginners REPL: seu melhor amigo no mundo Clojure

February 8, 2023