Olá, Vitor. Como vai?
Parabéns por mais essa entrega! O seu código está muito bem estruturado e você aplicou corretamente as condicionais com retornos antecipados (early returns) dentro da função de frete. Essa técnica deixa o código mais limpo, pois evita o uso excessivo de blocos else.
Gostaria de destacar alguns pontos excelentes na sua implementação:
- Lógica de Faixas de Preço: Você organizou bem as condições de distância, garantindo que fretes curtos tenham um valor fixo e fretes muito longos tenham um teto de preço (R$ 20,00).
- Uso do .toFixed(2): Essa é a melhor prática para exibir valores monetários, garantindo que o usuário veja o preço com duas casas decimais, como em um sistema real.
- Validação de Entrada: O check
distancia <= 0 é fundamental, pois distâncias negativas ou zeradas não fariam sentido para o cálculo de logística.
Para complementar seu aprendizado, vale notar um detalhe interessante na sua lógica: no intervalo entre 5km e 10km, o frete calculado (distancia * 0.5) pode acabar sendo mais barato que o valor fixo de R$ 5,00 definido para distâncias menores (por exemplo, 6km resultaria em R$ 3,00).
Se a intenção for que R$ 5,00 seja o valor mínimo de qualquer entrega, uma sugestão seria usar a função Math.max():
const calcularFrete = (distancia) => {
if (distancia > 20) return 20;
// Garante que o valor nunca seja menor que 5
return Math.max(5, distancia * 0.5);
};
Dessa forma, você simplifica ainda mais as condições e garante a viabilidade comercial do frete. Continue com esse ótimo desempenho e atenção aos detalhes!
Espero que possa ter lhe ajudado!