1
resposta

[Dúvida] Exercício: Classificação de idades para uma atividade

Fazendo a tratativa da idade, fiquei em dúvida se seria necessário usar if(Number.isNaN(idade)). O if(!Number.isInteger(idade)) já verifica se é um número inteiro válido, então por que explicitamente verificar se o que chegou é um número?

import { createInterface } from "readline";

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

const categorizarIdade = (idade) => {
  if (idade < 12) return "Infantil";
  if (idade <= 18) return "Juvenil";
  return "Adulto";
};

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

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

  console.log(categorizarIdade(idade));

  rl.close();
});
1 resposta

Olá Vitor! Tudo bem?

A sua dúvida é muito pertinente. Quando você usa Number.isInteger(idade), está verificando se a idade é um número inteiro. Isso já ajuda a garantir que a entrada seja um número válido e não um valor como uma string ou um número decimal.

No entanto, a função Number.isNaN(idade) é utilizada especificamente para verificar se o valor é NaN (Not-a-Number). Isso pode ser útil em casos onde a conversão de uma string para número falha, resultando em NaN. Por exemplo, se alguém digitar algo que não pode ser convertido em número, como "abc", Number(input) retornará NaN.

No seu código, quando você faz const idade = Number(input);, se o input não puder ser convertido para um número, idade será NaN. E Number.isInteger(NaN) retornará false, então o seu if (!Number.isInteger(idade) || idade < 0) já cobre o caso de entradas inválidas, como strings não numéricas ou números negativos.

Portanto, não é estritamente necessário usar Number.isNaN(idade) aqui, pois !Number.isInteger(idade) já lida com entradas que não são números inteiros válidos, incluindo NaN.

Espero ter ajudado. Conte sempre com nosso apoio :)

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado