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

[Dúvida] eu fiz um pouco diferente

eu fiz um pouco diferente:

const notaDoAluno = 9
if(notaDoAluno >= 9) {
    console.log('Excelente')
}
if(notaDoAluno >=7 && notaDoAluno <9){
    console.log('bom')}
if(notaDoAluno >=4 && notaDoAluno <7){
    console.log('médio')
}
if(notaDoAluno<=3){
    console.log('ruim')
}

ao invés de como na aula:

if(notaDoAluno >=9) {
    console.log('Excelente')
} else if (notaDoAluno>=7){
    console.log('bom')
} else if (notaDoAluno >=4){
    console.log('médio')
} else {
    console.log('ruim')
}
1 resposta

Fala, Esperidião! Tudo bem?

Massa que você testou um caminho diferente — é exatamente assim que a coisa fixa. E o seu código funciona, tá? Só que tem dois pontos que valem a conversa:

1. Tem uma nota escapando

Repara no último if:

if(notaDoAluno<=3){
    console.log('ruim')
}

E o anterior começa em >=4. O que acontece se a nota for 3.5? Ela não é >= 4 e também não é <= 3. Resultado: nada é impresso. O aluno fica sem classificação.

Com else, esse buraco não existe: tudo que não caiu nas condições anteriores vai pro ruim.

2. Você está fazendo o trabalho que o else if faria pra você

No seu código, cada if precisa delimitar o intervalo dos dois lados (>=7 && <9, >=4 && <7). Por quê? Porque os ifs são independentes: o JavaScript testa todos, um por um, mesmo depois de já ter achado a resposta.

Com else if, a leitura é em cascata: se entrou no primeiro bloco, os outros nem são avaliados. Então basta você dizer o limite de baixo, porque o de cima já foi "descartado" pelo bloco anterior:

if (notaDoAluno >= 9) {
    console.log('Excelente')
} else if (notaDoAluno >= 7) {   // aqui já sei que é < 9
    console.log('bom')
} else if (notaDoAluno >= 4) {   // aqui já sei que é < 7
    console.log('médio')
} else {                         // sobrou? é ruim
    console.log('ruim')
}

Menos condição escrita = menos lugar pra errar (e aquele 3.5 some do mapa).

Quando usar cada um?

  • if separados: quando as condições são independentes e mais de uma pode ser verdadeira ao mesmo tempo. Ex: "se tem desconto, aplica; se é frete grátis, aplica" — os dois podem acontecer.
  • if / else if / else: quando as opções são mutuamente exclusivas e só uma deve rodar. Nota do aluno é o caso clássico: ele é excelente ou bom ou médio ou ruim, nunca dois ao mesmo tempo.

Testa aí com 3.5 nas duas versões e vê a diferença na prática. Qualquer dúvida, chama!