Condicionais switch case: escolhendo caminhos de forma organizada

Explore uma forma elegante de lidar com múltiplas escolhas, como um menu de opções.

Imagine que você está em um restaurante e o garçom te pergunta: "Qual prato você gostaria?". Você não vai responder "Se for pizza, eu quero pizza. Se for macarrão, eu quero macarrão. Se for salada, eu quero salada...". Seria muito repetitivo, não é?

Em vez disso, você simplesmente diz o nome do prato, e o garçom (que já sabe o que fazer para cada prato) traz o que você pediu.

No JavaScript, a estrutura switch case funciona de forma parecida. Ela é perfeita para quando você tem uma única variável ou expressão e quer executar diferentes blocos de código dependendo do valor exato dessa variável ou expressão. É como ter um menu de opções e escolher uma delas.

Como funciona o switch case?

A sintaxe básica é assim:

switch (expressao) {
  case valor1:
    // Código a ser executado se 'expressao' for igual a 'valor1'
    break; // Importante para sair do switch!
  case valor2:
    // Código a ser executado se 'expressao' for igual a 'valor2'
    break;
  case valor3:
    // Código a ser executado se 'expressao' for igual a 'valor3'
    break;
  default:
    // Código a ser executado se 'expressao' não corresponder a nenhum dos 'cases'
    break; // Opcional no default, mas boa prática
}

Vamos entender cada parte:

  1. switch (expressao): Aqui você coloca a variável ou a expressão cujo valor você quer testar. É como o garçom perguntando "Qual prato?".
  2. case valor:: Cada case representa uma opção de valor que a expressao pode ter. Se a expressao for igual a valor, o código dentro deste case será executado. É como você dizendo "Quero pizza!".
  3. break;: Este é um comando muito importante! Ele serve para "quebrar" a execução do switch e sair dele. Se você esquecer o break, o JavaScript continuará executando o código dos cases seguintes, mesmo que eles não correspondam ao valor da expressao. Isso é chamado de "fall-through" e geralmente não é o que queremos.
  4. default:: O default é opcional e funciona como um else para o switch. Se a expressao não corresponder a nenhum dos cases definidos, o código dentro do default será executado. É como se você pedisse um prato que não está no cardápio, e o garçom dissesse "Desculpe, não temos esse prato."

Exemplo prático: Escolhendo o dia da semana

Vamos criar um programa que, dado um número, nos diga qual dia da semana ele representa.

let diaDaSemana = 3; // Vamos supor que 1 é Domingo, 2 é Segunda, etc.
let nomeDoDia;

switch (diaDaSemana) {
  case 1:
    nomeDoDia = "Domingo";
    break;
  case 2:
    nomeDoDia = "Segunda-feira";
    break;
  case 3:
    nomeDoDia = "Terça-feira";
    break;
  case 4:
    nomeDoDia = "Quarta-feira";
    break;
  case 5:
    nomeDoDia = "Quinta-feira";
    break;
  case 6:
    nomeDoDia = "Sexta-feira";
    break;
  case 7:
    nomeDoDia = "Sábado";
    break;
  default:
    nomeDoDia = "Número inválido para dia da semana.";
    break;
}

console.log("Hoje é " + nomeDoDia); // Saída: Hoje é Terça-feira

Neste exemplo, a variável diaDaSemana tem o valor 3. O switch compara esse valor com cada case. Quando encontra case 3, ele executa nomeDoDia = "Terça-feira"; e, em seguida, o break; faz com que ele saia do switch.

Agrupando cases

Às vezes, você pode querer que vários cases executem o mesmo código. Nesses casos, você pode agrupá-los, omitindo o break entre eles.

Exemplo: Saber se o dia é útil ou fim de semana.

let diaDaSemana = 6; // Sábado
let tipoDeDia;

switch (diaDaSemana) {
  case 1: // Domingo
  case 7: // Sábado
    tipoDeDia = "Fim de semana";
    break;
  case 2: // Segunda
  case 3: // Terça
  case 4: // Quarta
  case 5: // Quinta
  case 6: // Sexta
    tipoDeDia = "Dia útil";
    break;
  default:
    tipoDeDia = "Número inválido.";
    break;
}

console.log("Hoje é " + tipoDeDia); // Saída: Hoje é Fim de semana

Neste caso, se diaDaSemana for 1 ou 7, o código tipoDeDia = "Fim de semana"; será executado. Se for de 2 a 6, o código tipoDeDia = "Dia útil"; será executado.

Quando usar switch case vs. if/else if/else?

  • if/else if/else: É mais flexível e ideal para quando você precisa testar condições mais complexas (maior que, menor que, diferente de, combinações de condições com && e ||).
  • switch case: É mais legível e eficiente para quando você tem uma única expressão e quer comparar seu valor com múltiplos valores exatos. Pense nele como um "menu de opções" claro e organizado.

Ambos servem para tomar decisões no código, mas o switch case brilha quando a escolha é baseada em valores específicos e discretos.