Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Módulo 3: Controle de Fluxo

switch/case e Operadores Lógicos

Comparando valores fixos e combinando condições

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
OperadorNomeResultado
&&Etrue se ambos forem true
||OUtrue se pelo menos um for true
!NÃOInverte 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çãoUse
Muitos valores fixosswitch/case
Combinar condições&&, ||, !
Validações antes da lógica principalGuard clauses
Mais de 2 níveis de aninhamentoRefatore com guard clauses

Referências

Testa o que você leu

4 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.

Pergunta 1 de 4
Quando `switch` é melhor que uma cadeia de `if/else if`?