Introdução

Loop de leitura-avaliação (REPL) é um termo que se refere a um ambiente de computador interativo que recebe a entrada do usuário, a executa e retorna uma saída. Ou seja, o usuário insere uma ou mais expressões, essas expressões são avaliadas e um resultado é exibido.

O fato é, como desenvolvedor, você provavelmente já usou um ambiente REPL antes, sem saber como ele se chama. Exemplos comuns de REPL incluem:

CLI/terminais Ambientes Shell (por exemplo, shell Python, shell MySQL) Consoles de devtool do navegador

Neste artigo, aprenderemos como um REPL funciona internamente, como usar o Node. js REPL embutido e, finalmente, como configurar um ambiente REPL personalizado em Node.js.

Como funciona o REPL

A ideia por trás de como funciona um REPL é bastante direta. Primeiro, ele lê um trecho ou bloco de código inserido pelo usuário e, em seguida, avalia esse código. Após a conclusão do processo de avaliação, a saída resultante é impressa para o usuário e este processo é repetido (em loop) até que o usuário sinalize para sair.

O REPL do Node.js

Node.js é fornecido com um ambiente REPL que permite que você teste e explore rapidamente o código JavaScript sem ter que armazená-lo em um arquivo.

Antes de executar isso, você precisa ter Node.js instalado em sua máquina de desenvolvimento; você pode instalar o Node.js seguindo as instruções aqui .

Se você já tem o Node.js instalado, você não precisa instalar nenhum software adicional, e você pode iniciar o ambiente REPL digitando o comando abaixo em seu terminal:

node

Dependendo da versão do Node que você instalou, você deve ver uma saída que é semelhante ao seguinte:

O sinal > exibido no console significa que o REPL agora está ativo e você pode inserir qualquer código JavaScript para ser avaliado imediatamente.

Vamos experimentar usando o método global console.log para imprimir “Olá, mundo”. Digite o código abaixo em seu Nó REPL:

console.log (“Hello World & # x1f44b;”);

Você deve ver a seguinte saída exibida:

Criando um REPL personalizado em Node.js

O Node.js também permite que os desenvolvedores criem e usem REPL com o módulo repl . Este é o mesmo pacote que foi usado para criar o REPL padrão fornecido com o Node.js, portanto, ele fornece todas as opções de personalização de que podemos precisar.

Além disso, este é um módulo embutido. Ou seja, podemos usá-lo sem nenhuma instalação adicional.

Para importar o módulo em nosso programa:

const repl=require (‘repl’);

Iniciando um REPL

Podemos criar uma nova instância repl com o método repl.start (). Este método aceita dois parâmetros-o primeiro é a string usada para o prompt de seu REPL (e o padrão é > ), enquanto o segundo é o fluxo (entrada do usuário) que o REPL escuta.

Para experimentar, crie um novo arquivo (app.js) e cole o seguinte código:

const repl=require (“repl”); repl.start (“custom-repl=>”);

Salve o arquivo e, em sua CLI , execute o código:

node app.js

Você deve ver a seguinte saída:

E, sim, isso funciona da mesma maneira que o Node REPL padrão. Você pode tentar inserir o código JavaScript básico-como console.log (“Hello world”)-em seu REPL e deverá ver a saída exibida.

Escopo global e local

Por padrão, a nova instância REPL tem acesso a todas as variáveis ​​declaradas no escopo global do Node.js, e também é possível expor uma variável local ao REPL atribuindo-a explicitamente ao objeto de contexto:

const repl=require (“repl”);/* isso pode ser acessado diretamente de repl sem expô-lo ao contexto repl */global.globalVariable=”Isso pode ser acessado em qualquer lugar!”; nome const=”John Doe”;//expondo a variável local ao contexto repl repl.start (“custom-repl=>”).context.name=name;

Além disso, as variáveis ​​expostas ao contexto repl não são somente leitura por padrão e podem ser modificadas diretamente no ambiente REPL. Podemos mudar isso definindo as propriedades de contexto como a seguir:

const repl=require (“repl”); nome const=”John Doe”; const r=repl.start (“custom-repl=>”); Object.defineProperty (r.context,”nome”, {configurável: falso, enumerável: verdadeiro, valor: nome,});

Funções de avaliação personalizadas

O módulo REPL também permite criar uma função de avaliação personalizada; ou seja, a função a ser usada ao avaliar cada linha de entrada fornecida. Isso pode ser útil quando você está tentando construir aplicativos REPL totalmente personalizados.

Abaixo está um exemplo que verifica se a entrada do usuário é um número par ou ímpar e imprime a respectiva saída com base na entrada:

const repl=require (“repl”); function isEven (uInput, context, filename, callback) {callback (null, uInput% 2==0?”Número par”:”número ímpar”); } repl.start ({prompt:”custom-repl=>”, eval: isEven});

Personalizando a saída REPL

Também podemos personalizar as saídas retornadas de nosso REPL passando uma nova função para a opção gravador ao criar uma nova instância repl.

O código abaixo capitaliza a saída retornada de nosso exemplo anterior e usando npm módulo colors.js , ele também muda a cor do texto para vermelho:

const repl=require (“repl”); cores constantes=requerem (“cores”); const r=repl.start ({prompt:”custom-repl=>”, eval: isEven, writer: modifyOutput}); function isEven (uInput, context, filename, callback) {callback (null, uInput% 2==0?”Número par”:”número ímpar”); } função modifyOutput (output) {return output.toUpperCase (). red; }

E esta é a aparência da saída:

Fechando um REPL

Embora você possa interromper a execução do ambiente REPL pressionando Ctrl + C ou inserindo o comando.exit diretamente, você também pode fazer isso programaticamente com o método repl.close ():

Abaixo está um exemplo que fecha o REPL automaticamente após cinco segundos:

const repl=requer (“repl”); const r=repl.start (“custom-repl=>”); setTimeout (()=> {r.close ();}, 5000);

Conclusão

REPL é um ambiente de computador interativo que recebe a entrada do usuário, a executa e retorna uma saída. REPL também é uma ótima alternativa para editores de texto se você deseja explorar exemplos de código sem ter que armazená-los em um arquivo.

E neste artigo, aprendemos como um REPL funciona internamente, como usar o ambiente REPL embutido do Node e, finalmente, como criar um REPL personalizado no Node.js.