switch/case e Operadores Lógicos
switch/case --- comparando valores fixos
Pense no switch como uma máquina de refrigerante. Você aperta o botão (valor) e ela entrega o resultado correspondente.
Quando você tem muitos else if comparando a mesma variável, o switch fica mais limpo:
const dia: string = "segunda";
switch (dia) {
case "sábado":
case "domingo":
console.log("Fim de semana!"); // → (não executa)
break;
case "segunda":
case "quarta":
case "sexta":
console.log("Dia de aula"); // → Dia de aula
break;
default:
console.log("Dia útil normal");
}
Cada case compara o valor. O break encerra o switch. O default funciona como o else.
Outro exemplo; menu de opções:
const opção: number = 2;
switch (opção) {
case 1:
console.log("Cadastrar aluno");
break;
case 2:
console.log("Consultar notas"); // → Consultar notas
break;
case 3:
console.log("Gerar relatório");
break;
default:
console.log("Opção inválida");
}
Operadores lógicos
Combinam condições. Pense assim:
&&(E): as duas precisam ser verdadeiras||(OU): basta uma ser verdadeira!(NÃO): inverte o valor
| Operador | Nome | Resultado |
|---|---|---|
&& | E | true se ambos forem true |
|| | OU | true se pelo menos um for true |
! | NÃO | Inverte o booleano |
const idade: number = 20;
const temCarteira: boolean = true;
const podeConduzir = idade >= 18 && temCarteira; // → true
const podeEntrar = idade >= 18 || temCarteira; // → true
const menorIdade = !(idade >= 18); // → false
Combinando operadores
Use parênteses para deixar claro o que vem primeiro:
const idade: number = 25;
const temIngresso: boolean = true;
const ehVIP: boolean = false;
if ((idade >= 18 && temIngresso) || ehVIP) {
console.log("Entrada permitida"); // → Entrada permitida
}
Traduzindo: maior de idade COM ingresso, OU VIP.
Exemplo prático
const chovendo: boolean = false;
const temGuardaChuva: boolean = true;
if (!chovendo || temGuardaChuva) {
console.log("Pode sair"); // → Pode sair
}
const logado: boolean = false;
if (!logado) {
console.log("Faça login"); // → Faça login
}
Guard clauses --- retorno antecipado
Em vez de aninhar vários if/else, teste os casos de saída primeiro e retorne logo:
function verificarAcesso(idade: number, temIngresso: boolean): string {
if (idade < 18) return "Proibido para menores";
if (!temIngresso) return "Compre seu ingresso";
return "Acesso liberado!";
}
Compare com a versão aninhada:
// Versão aninhada - mais difícil de ler
function verificarAcesso(idade: number, temIngresso: boolean): string {
if (idade >= 18) {
if (temIngresso) {
return "Acesso liberado!";
} else {
return "Compre seu ingresso";
}
} else {
return "Proibido para menores";
}
}
Mesmo resultado, mas guard clauses são mais fáceis de ler e estender.
Mais exemplos
function calcularDesconto(preco: number, cupom: string): number {
if (preco <= 0) return 0;
if (cupom === "") return preco;
if (cupom === "METADE") return preco * 0.5;
if (cupom === "DEZ") return preco - 10;
return preco; // cupom inválido
}
function podeVotar(idade: number, tituloAtivo: boolean): string {
if (idade < 16) return "Não pode votar";
if (!tituloAtivo) return "Regularize seu título";
if (idade < 18 || idade > 70) return "Voto facultativo";
return "Voto obrigatório";
}
Resumo: quando usar cada técnica
| Situação | Use |
|---|---|
| Muitos valores fixos | switch/case |
| Combinar condições | &&, ||, ! |
| Validações antes da lógica principal | Guard clauses |
| Mais de 2 níveis de aninhamento | Refatore com guard clauses |
Referências
- switch - MDN Web Docs - documentação oficial do switch/case com exemplos de fall-through e default
- JavaScript Switch Statement - W3Schools - tutorial interativo sobre switch/case e quando usá-lo
- Switch Case em JavaScript - Curso em Vídeo - vídeo explicando switch/case e combinação com operadores lógicos
Testa o que você leu
4 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.