5
respostas

Forma mais curta (alternativa) de resposta

Olá. Testei o seguinte código e ele parece funcionar de acordo. Gostaria de sugerir ele como uma possível resposta correta para o exercício, já que ele ao meu ver seria menos confuso do que abrir outra função if dentro de uma função if.

let porcentagemDesconto = 0;

if(quantidadeMilhas > 30000){
    porcentagemDesconto = 20;
} else if(quantidadeMilhas > 5000){
    porcentagemDesconto = 10;
} 

Seria aplicável?

5 respostas

Olá, Boa Noite!

A condicional "else if" faz a mesma coisa que:

else {
    if(){
    }
}

O que ocorre na resposta original não é um "if dentro de uma função if". O "if" está dentro da condicional "else", ou seja, a sua solução faz a mesma coisa que a solução original.

Em conclusão, não tem problema usar "else if". Seu código está correto, sua solução está realmente mais concisa e fácil de ler.

Talvez até tenha sido proposital! Conseguir fazer a leitura de um código mais complexo e difícil de decifrar é um ótimo exercício ao meu ver.

E cláusula ELSE é opcional.

E quando se usa apenas o IF chamamos de cláusula de guarda, muito utilizado esse jargão.

"Mas, segundo relatos de clientes, ao tentar utilizar o desconto referente a 5.000 milhas, não ocorre nenhum desconto." Se há uma reclamação de que clientes com exatas 5.000 milhas não tem desconto, não deveria também incluir quem tem 5.000 milhas? Tipo usar um >= 5000 ao invés de > 5000:

else if(quantidadeMilhas >= 5000){ porcentagemDesconto = 10;

Se na regra de negócio fala que inferior a 5000 não tem desconto, então 5000 tem de estar incluso no desconto de 10%.

Fiz uma simulação no CodePen. Eu quiz especificar o espaço entre 5.000 e 30.000, concatenando essas condições, como segue:

function calcularDesconto(milhas) {
    if (milhas < 5000) {
        return 0; // Sem desconto para menos de 5.000 milhas
    } else if (milhas >= 5000 && milhas < 30000) {
        return 0.1; // 10% de desconto para 5.000 a 29.999 milhas
    } else if (milhas >= 30000) {
        return 0.2; // 20% de desconto para 30.000 milhas ou mais
    }
}

Excelente Rayane, obrigado por contribuir com a visão e fez na abordagem usando função!

Ainda na linha do último else if daria para ser apenas um else e sem colocar as condições, pois todas as condições anteriores já foram esgotadas e caso o valor seja maior ou igual a 30.000 cairia na cláusula else.

Pensando-se na questão da regra do negócio, geralmente a gente faz o que o cliente pede e pensando-se que esse cliente é um desenvolvedor ou alguém que entenda pelo menos em parte. Daí usamos a boa comunicação assertiva para fazer uma contraproposta de que clientes possuindo a partir de 5.000 milhas possam usufruir do desconto de 10%, primeiro nível de desconto, e que clientes a partir de 30.000 milhas usufruam dos 20%, segundo nível de desconto.

Assim, estou de acordo com o que o Cloe Alberto mencionou sobre essa pequena mudança na regra de negócio, claro que devemos avisar o cliente para tomar ciência e aval.

Numa questão cultural eu pensei como um valor "redondo" daí fica mais fácil para os clientes que irão interagir com esse sistema de milhas e descontos compreenderem quais são os níveis de desconto dependendo do número de milhas.