2
respostas

[Projeto] Exercício: Acesso liberado?

import { createInterface } from "readline";

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

rl.question("Boas-vindas! Quantos anos você tem?\n> ", (resposta) => {
  const idade = Number(resposta);

  if (!Number.isInteger(idade) || idade < 0) {
    console.log("Insira uma idade válida");
  } else {
    console.log(idade >= 18 ? "Acesso permitido." : "Acesso negado.");
  }

  rl.close();
});
2 respostas

Oii Vitor, tudo bem?

Obrigado por compartilhar sua solução no fórum, ela vai ajudar outros alunos que passarem por esse exercício!

Seu código vai além do proposto: enquanto o exercício pede apenas a verificação da idade com um valor fixo, você criou uma entrada interativa com readline e ainda adicionou validação de entrada. Isso mostra iniciativa e cuidado com casos de borda.

Um ponto que vale observar: Number.isInteger não vai capturar todos os casos inválidos da forma que você espera. Por exemplo:

Number.isInteger(Number("abc")) // false ✅ — detecta corretamente
Number.isInteger(Number("1.5")) // false ✅ — detecta corretamente
Number.isInteger(Number(""))    // false... espera, não.
Number.isInteger(Number(""))    // Number("") === 0 → true ❌

Number("") retorna 0, então uma entrada vazia passaria pela validação como se fosse a idade zero. Uma alternativa mais robusta é usar isNaN antes:

if (isNaN(idade) || !Number.isInteger(idade) || idade < 0) {
  console.log("Insira uma idade válida");
}

Vale também pensar: faz sentido aceitar 0 como idade válida? Ou o limite inferior deveria ser > 0? Fica a reflexão!

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade

Olá, Victor! Fico feliz com a sua resposta e suas dicas!

Muito obrigado pela sugestão do isNaN, eu estava realmente tendo essa dúvida. Não estava conseguindo imaginar um cenário onde seria necessário sua utilização, considerando que o isInteger, supostamente, poderia barrar "tudo" que não fosse desejado, mas percebi que não é bem o caso. Clareou minha mente! ;D

Sobre a idade. Sim, nesse caso eu quis que 0 fosse considerado válido. De vez em quando vemos recém-nascidos serem considerados crianças de "0 anos" além de X meses, claro. Também é evidente que um recém nascido dificilmente participaria de uma atividade escolar, mas o mesmo vale para crianças de 1 ano, então deixei a partir de 0 mesmo.

Muito obrigado pelo seu comentário! ;D