Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Exercício: Verificando o acesso restrito

Nessa versão, não existe um limite para a contagem. Ela apenas será interrompida quando chegar ao número proibido escolhido pelo usuário.

import { createInterface } from "readline";

const rl = createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.question("Defina o número proibido da contagem:\n> ", (input) => {
  const numProibido = Number(input)

  if (Number.isNaN(numProibido) || !Number.isInteger(numProibido) || numProibido < 1){
    console.log("O número proibido deve ser maior que 0");
    rl.close();
    return
  }

  let numAtual = 1;

  while (numAtual < numProibido) {
    console.log(numAtual++);
  }

  console.log("Número proibido encontrado! Encerrando...");
  rl.close();
});
2 respostas
solução!

Olá, Vitor. Como vai?

Parabéns pela implementação do código! Ficou excelente a forma como você utilizou o laço while para criar uma contagem dinâmica, em vez de um limite fixo. Essa abordagem demonstra que você compreendeu bem o conceito de repetições baseadas em condições.

Gostaria de destacar alguns pontos muito positivos no seu projeto:

  • Validação de Dados: O uso de Number.isNaN e Number.isInteger é uma prática de segurança essencial. Isso evita que o programa entre em um loop infinito ou apresente comportamentos inesperados caso o usuário digite um texto ou um número decimal.
  • Uso do Operador de Incremento: Ao utilizar numAtual++ dentro do console.log, você escreveu um código mais conciso, realizando a impressão e o incremento na mesma linha.
  • Interface de Leitura: A utilização do módulo readline nativo do Node.js para interagir com o terminal torna o exercício muito mais próximo de uma aplicação real.

Para complementar o seu aprendizado sobre laços de repetição, vale observar como o while se comporta em relação ao fluxo do programa:

  • Condição de Parada: Como você definiu numAtual < numProibido, o número proibido em si nunca é impresso no laço, apenas a mensagem final de encerramento. Isso está logicamente perfeito de acordo com a sua proposta de "interromper ao chegar no número".
  • Sugestão de Refatoração: Caso você quisesse que a verificação acontecesse após a primeira execução, poderia explorar o do...while, mas para este caso de contagem, o while tradicional que você usou é o mais indicado.

Uma pequena dica de estilo: em projetos maiores, é comum separar a lógica de validação em uma função específica para manter o corpo do rl.question mais limpo, mas para este exercício, a estrutura está muito legível e funcional.

Espero que possa ter lhe ajudado!

Oi, Evandro! Como vai?

Obrigado pelo feedback e pelos pontos levantados, ajudaram bastante.

Sobre o fato de o número proibido não ser impresso, isso foi algo que eu parei pra me preocupar durante a solução do problema. Mas ao analisar a saída esperada do exercício, percebi que realmente não seria necessário imprimir o número proibido em si, apenas encerrar a contagem antes dele.

Também estou me esforçando para utilizar mais funções modulares no meu código, justamente para manter o fluxo principal mais limpo e legível.

Valeu pelas observações!