Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

08 Faça como eu fiz: console.log

let quantidadeMilhas = 3000;
let porcentagemDesconto = 0;

if (quantidadeMilhas >= 5000 && quantidadeMilhas < 30000){
porcentagemDesconto = porcentagemDesconto + 10;
console.log('desconto de 10% aplicado')
}

if (quantidadeMilhas >= 30000){
porcentagemDesconto = porcentagemDesconto + 20;
console.log('desconto de 20% aplicado')

} else {
console.log('desconto ZERADO')
porcentagemDesconto = 0;
}

1 resposta

Olá, GABRIEL. Como vai?

Muito legal ver você praticando o uso do console.log para rastrear o comportamento do seu código! Essa é uma das principais técnicas que nós, desenvolvedores, usamos no dia a dia para debugar (encontrar falhas) e entender o fluxo dos nossos sistemas.

No entanto, ao analisar a estrutura das suas condições, há um detalhe muito importante na lógica do segundo bloco if / else que está gerando um comportamento inesperado (um bug mascarado).

Se você rodar o seu código com quantidadeMilhas = 10000, o primeiro bloco if vai registrar corretamente no console: 'desconto de 10% aplicado'. Porém, logo em seguida, o console também vai registrar 'desconto ZERADO' e resetar os seus pontos para 0.

Por que isso acontece?

Isso ocorre porque os seus dois blocos if estão completamente isolados um do outro.

Quando o JavaScript termina de testar o primeiro bloco, ele entra no segundo if (quantidadeMilhas >= 30000). Como 10000 não é maior ou igual a 30000, a condição falha e o programa executa imediatamente o bloco else associado a ele, limpando o desconto que você havia acabado de ganhar!

Como corrigir usando o else if

Para resolver esse problema, as suas condições precisam estar interligadas em um único fluxo. Assim, o JavaScript testa a primeira opção; se não for, ele testa a segunda; e se nenhuma for verdadeira, ele cai no else.

Veja como o seu código fica corrigido e muito mais seguro:

let quantidadeMilhas = 3000;
let porcentagemDesconto = 0;

if (quantidadeMilhas >= 5000 && quantidadeMilhas < 30000) {
    porcentagemDesconto = 10;
    console.log('Desconto de 10% aplicado. Desconto atual: ' + porcentagemDesconto + '%');
} else if (quantidadeMilhas >= 30000) {
    porcentagemDesconto = 20;
    console.log('Desconto de 20% aplicado. Desconto atual: ' + porcentagemDesconto + '%');
} else {
    porcentagemDesconto = 0;
    console.log('Desconto ZERADO. O cliente possui menos de 5000 milhas.');
}

O que mudou?

  • Uso do else if: Agora, o programa só vai testar se o cliente tem mais de 30.000 milhas se ele não se encaixar na primeira regra.
  • Fluxo do else real: O bloco else agora só será executado se a quantidade de milhas for menor do que 5.000, garantindo que quem tem 10.000 milhas mantenha o seu desconto de 10% intacto.
  • Melhoria nos logs: Aproveitei para concatenar o valor da variável dentro do console.log para tornar o rastreamento no terminal ainda mais informativo.

Continue usando bastante o console.log nos seus estudos, ele é o seu melhor amigo para entender o que acontece por debaixo dos panos do código!

Espero que possa ter lhe ajudado!