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

[Projeto] Exercício: Calculando a média de duas notas

Nesta versão, o usuário possui interface para inserir as duas notas.

import { createInterface } from "readline";

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

const calcularMedia = (nota1, nota2) => {
  return (nota1 + nota2) / 2;
};

const validarNota = (nota) => {
  if (Number.isNaN(nota) || nota < 0 || nota > 10) {
    console.log("Insira uma nota válida.");
    return null;
  }
  return nota;
};

rl.question("Insira a primeira nota:\n> ", (input) => {
  const nota1Valida = validarNota(Number(input));

  if (nota1Valida === null) {
    rl.close();
    return;
  }

  rl.question("Insira a segunda nota:\n> ", (input) => {
    const nota2Valida = validarNota(Number(input));

    if (nota2Valida === null) {
      rl.close();
      return;
    }

    console.log(`Média: ${calcularMedia(nota1Valida, nota2Valida)}`);

    rl.close();
  });
});
2 respostas
solução!

Olá, Vitor. Como vai?

Parabéns por concluir mais este exercício! Sua solução está muito bem estruturada e demonstra uma excelente aplicação do conceito de reutilização de código ao criar a função validarNota.

Gostaria de destacar alguns pontos extremamente positivos no seu projeto:

  • Modularização: Ao separar a lógica de cálculo da lógica de validação, você deixou o código muito mais fácil de ler e manter. A função validarNota centraliza a regra de que uma nota deve estar entre 0 e 10, evitando repetição de código nos dois campos de entrada.
  • Precedência de Operadores: Na sua função calcularMedia, você usou os parênteses corretamente: (nota1 + nota2) / 2. Sem os parênteses, o JavaScript dividiria apenas a segunda nota por dois antes de somar com a primeira, o que resultaria em um cálculo incorreto.
  • UX e Segurança: O uso do null como retorno para sinalizar uma falha na validação é uma técnica inteligente para interromper o fluxo do programa de forma limpa.

Para complementar seu aprendizado, deixo uma pequena sugestão de refinamento:

No JavaScript, o valor 0 é considerado falsy. Na sua função validarNota, se o usuário tirar nota 0, ela é uma nota válida, mas o retorno 0 poderia ser interpretado como falso em algumas situações. No seu caso atual, como você verifica estritamente === null, o código funciona perfeitamente. Contudo, em projetos maiores, é comum retornar um booleano ou lançar um erro para tornar a validação ainda mais explícita.

Outro ponto legal: caso queira que a média sempre tenha uma casa decimal (como 7.5 ou 8.0), você pode utilizar o método .toFixed(1) no console.log final.

Continue mantendo esse nível de organização em seus códigos, pois a validação de entradas é uma das partes mais críticas do desenvolvimento de software!

Espero que possa ter lhe ajudado!

Oi, Evandro! Tudo bem?

Obrigado pelo feedback e pelas observações.

Confesso que não tinha parado pra pensar nesse detalhe do 0 como valor falsy. De fato, se a verificação fosse algo como if (!nota1Valida), o retorno de 0 poderia acabar caindo no tratamento de entrada inválida mesmo sendo um valor válido.

Vou me atentar mais a isso nas próximas implementações.

Obrigado pela dica!