Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Exercício: Calculando desconto

Nesta versão, o usuário possui uma interface para inserir valor do livro e o desconto que receberá

import { createInterface } from "readline";

const calcPrecoFinal = (preco, desconto = 10) => {
  return preco - preco * (desconto / 100);
};

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

rl.question("Qual o preço do livro?\n> ", (input) => {
  const preco = Number(input);

  if (Number.isNaN(preco) || preco <= 0) {
    console.log("Insira um valor válido.");
    rl.close();
    return;
  }

  rl.question("Insira o desconto (em porcentagem)\n> ", (input) => {
    const desconto = Number(input);

    const precoFinal =
      Number.isNaN(desconto) || desconto <= 0 || desconto > 100
        ? calcPrecoFinal(preco)
        : calcPrecoFinal(preco, desconto);

    console.log(`Preço Final: R$${precoFinal}`);

    rl.close();
  });
});
1 resposta
solução!

Olá, Vitor. Como vai?

Parabéns por mais essa entrega! O seu código está excelente e demonstra uma maturidade muito boa no uso de JavaScript, especialmente na forma como você lida com entradas de dados e regras de negócio.

Gostaria de destacar alguns pontos muito positivos na sua solução:

  • Parâmetro Default: Na função calcPrecoFinal, o uso de desconto = 10 é uma prática recomendada para garantir que a função tenha um comportamento padrão seguro caso nenhum valor seja passado.
  • Operador Ternário para Validação: A forma como você decidiu se usaria o desconto padrão ou o inserido pelo usuário foi muito elegante. Ao verificar se o desconto é válido (entre 0 e 100) antes de chamar a função, você evita cálculos que resultariam em preços negativos ou incoerentes.
  • Fórmula Matemática: A lógica preco - preco * (desconto / 100) está correta e segue a precedência de operadores da matemática e da programação.

Para agregar ainda mais valor ao seu projeto, deixo duas pequenas sugestões:

  • Arredondamento: Ao lidar com valores monetários, é comum que divisões gerem muitas casas decimais (como 15.5555...). Você pode usar o método .toFixed(2) no console final para garantir que o preço sempre apareça com dois dígitos após a vírgula (ex: R$15.56).
  • Tratamento de Desconto Zero: No seu ternário, você definiu que se o desconto for 0, ele assume o padrão de 10. Dependendo da regra de negócio, o usuário pode querer aplicar um desconto de 0% de fato. Se quiser permitir isso, bastaria ajustar a condição para desconto < 0.

Veja como ficaria o trecho final formatado:

console.log(`Preço Final: R$${precoFinal.toFixed(2)}`);

Sua evolução nos cursos de JavaScript é nítida. Continue mantendo esse padrão de organização e validação nos seus códigos!

Espero que possa ter lhe ajudado!