if, else e switch
if e else
const idade = 15;
if (idade >= 18) {
console.log("Pode se matricular sozinho");
} else {
console.log("Precisa de responsável");
}
O else é opcional:
const vagas = 0;
if (vagas === 0) {
console.log("Turma lotada");
}
else if
const nota = 7.5;
if (nota >= 9) {
console.log("Excelente");
} else if (nota >= 7) {
console.log("Aprovado");
} else if (nota >= 5) {
console.log("Recuperação");
} else {
console.log("Reprovado");
}
A avaliação para na primeira condição verdadeira. Por isso a ordem importa:
se nota >= 5 viesse primeiro, uma nota 9 cairia ali e nunca chegaria ao
"Excelente".
Chaves, sempre
// Funciona, mas é frágil
if (vagas === 0) console.log("Lotada");
// Preferível
if (vagas === 0) {
console.log("Lotada");
}
Sem chaves, acrescentar uma segunda linha depois cria um defeito silencioso: ela
fica fora do if e roda sempre.
Cláusula de guarda
Em vez de aninhar:
// Difícil de ler
function matricular(aluno) {
if (aluno) {
if (aluno.idade >= 14) {
if (aluno.documento) {
console.log("Matrícula feita");
}
}
}
}
// Plano: trata a exceção e sai
function matricular(aluno) {
if (!aluno) return;
if (aluno.idade < 14) return;
if (!aluno.documento) return;
console.log("Matrícula feita");
}
O caminho principal fica sem indentação, e cada motivo de recusa fica visível na própria linha.
switch
const turno = "manha";
switch (turno) {
case "manha":
console.log("8h às 11h");
break;
case "tarde":
console.log("14h às 17h");
break;
case "noite":
console.log("19h às 22h");
break;
default:
console.log("Turno não reconhecido");
}
O break é obrigatório na prática: sem ele, a execução cai no caso seguinte
e continua. Esquecê-lo é um dos defeitos mais chatos de encontrar.
A queda proposital serve para agrupar:
switch (dia) {
case "sabado":
case "domingo":
console.log("Fim de semana");
break;
default:
console.log("Dia útil");
}
O switch compara com ===, então "1" não casa com case 1.
O objeto de consulta
Quando a decisão é só traduzir uma chave num valor, nem if nem switch
são o melhor:
// Longo
function rotuloDoTurno(turno) {
if (turno === "manha") return "Manhã (8h às 11h)";
if (turno === "tarde") return "Tarde (14h às 17h)";
if (turno === "noite") return "Noite (19h às 22h)";
return "Turno não reconhecido";
}
// Direto
const ROTULOS_DO_TURNO = {
manha: "Manhã (8h às 11h)",
tarde: "Tarde (14h às 17h)",
noite: "Noite (19h às 22h)",
};
function rotuloDoTurno(turno) {
return ROTULOS_DO_TURNO[turno] ?? "Turno não reconhecido";
}
Acrescentar um turno vira uma linha no objeto. E o objeto pode até vir de fora, de um arquivo de configuração.
Um exemplo completo
const PRECO_POR_KG_EM_CENTAVOS = {
farinha: 1250,
acai: 2500,
tucuma: 800,
};
function calcularItem(produto, quilos) {
if (!produto) return 0;
if (quilos <= 0) return 0;
const preco = PRECO_POR_KG_EM_CENTAVOS[produto];
if (preco === undefined) return 0;
return Math.round(preco * quilos);
}
function faixaDeDesconto(totalEmCentavos) {
if (totalEmCentavos >= 10000) return 10;
if (totalEmCentavos >= 5000) return 5;
return 0;
}
const total = calcularItem("farinha", 3) + calcularItem("acai", 2);
const desconto = faixaDeDesconto(total);
console.log(`Total: R$ ${(total / 100).toFixed(2)}`);
console.log(`Desconto: ${desconto}%`);
Exercícios
- Escreva um
if/else ifque classifique a idade em criança, adolescente, adulto e idoso. - Reescreva com cláusulas de guarda uma função com três
ifaninhados. - Faça um
switchpara o dia da semana, agrupando sábado e domingo. - Esqueça um
breakde propósito e observe o resultado. - Troque uma cadeia de
ifque só traduz chaves por um objeto de consulta. - Escreva a função de faixa de desconto: 5% acima de R$ 50, 10% acima de R$ 100.
Referências
- Tomando decisões - MDN -
if,elseeswitch switch- MDN - a queda entre casos- JavaScript If Else - W3Schools - exemplos com editor
Testa o que você leu
5 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.