Estruturas de Controle em JavaScript: if, switch e Tratamento de Fluxo: Do Básico ao Avançado Já leu

Estruturas Condicionais: A Base da Lógica em JavaScript As estruturas de controle são o coração de qualquer programa. Elas permitem que seu código tome decisões baseadas em condições, executando diferentes blocos de código conforme necessário. Em JavaScript, as duas principais ferramentas para isso são e , cada uma com seu propósito específico. Dominar essas estruturas é fundamental para escrever código limpo, eficiente e fácil de manter. O Statement if/else e Seus Variantes O é a estrutura mais básica e versátil. Ele avalia uma condição booleana e executa um bloco de código se ela for verdadeira. O oferece uma alternativa quando a condição é falsa, e o permite encadear múltiplas condições. É perfeito para atribuições rápidas, mas não abuse — código ilegível prejudica manutenção. Evite ternários aninhados sem quebras de linha. Switch: Controle para Múltiplas Opções O é ideal quando você precisa comparar uma única variável contra múltiplos valores específicos. É mais legível que múltiplos e geralmente mais eficiente. A sintaxe

Estruturas Condicionais: A Base da Lógica em JavaScript

As estruturas de controle são o coração de qualquer programa. Elas permitem que seu código tome decisões baseadas em condições, executando diferentes blocos de código conforme necessário. Em JavaScript, as duas principais ferramentas para isso são if/else e switch, cada uma com seu propósito específico. Dominar essas estruturas é fundamental para escrever código limpo, eficiente e fácil de manter.

O Statement if/else e Seus Variantes

O if é a estrutura mais básica e versátil. Ele avalia uma condição booleana e executa um bloco de código se ela for verdadeira. O else oferece uma alternativa quando a condição é falsa, e o else if permite encadear múltiplas condições.

const idade = 18;

if (idade < 13) {
  console.log("Você é uma criança");
} else if (idade < 18) {
  console.log("Você é um adolescente");
} else if (idade < 60) {
  console.log("Você é um adulto");
} else {
  console.log("Você é um idoso");
}

Um erro comum é usar = (atribuição) em vez de == ou === (comparação). Sempre prefira === para evitar coerção de tipo involuntária. Também evite ifs aninhados excessivamente — isso prejudica a legibilidade. Quando tem mais de 2-3 níveis, considere usar switch ou refatorar a lógica.

O Operador Ternário: if/else Compacto

Para condições simples, o operador ternário oferece uma sintaxe mais concisa:

const status = idade >= 18 ? "maior de idade" : "menor de idade";
console.log(status);

É perfeito para atribuições rápidas, mas não abuse — código ilegível prejudica manutenção. Evite ternários aninhados sem quebras de linha.

Switch: Controle para Múltiplas Opções

O switch é ideal quando você precisa comparar uma única variável contra múltiplos valores específicos. É mais legível que múltiplos else if e geralmente mais eficiente. A sintaxe usa case para cada valor e break para sair do bloco. Sem break, o código continua executando para o próximo case — comportamento chamado "fall-through".

const diaSemana = 3;
let nomeDia;

switch (diaSemana) {
  case 1:
    nomeDia = "Segunda";
    break;
  case 2:
    nomeDia = "Terça";
    break;
  case 3:
    nomeDia = "Quarta";
    break;
  case 4:
    nomeDia = "Quinta";
    break;
  case 5:
    nomeDia = "Sexta";
    break;
  case 6:
  case 7:
    nomeDia = "Fim de semana";
    break;
  default:
    nomeDia = "Dia inválido";
}

console.log(nomeDia); // "Quarta"

Observe que os casos 6 e 7 compartilham o mesmo bloco — isso é proposital. Use default como um fallback para valores não esperados. O switch funciona com comparação estrita (===), então tipos importam.

Tratamento Avançado de Fluxo e Boas Práticas

Combinando Estruturas e Otimizando Lógica

Em cenários complexos, você pode combinar if, switch e operadores lógicos (&&, ||, !) para criar fluxos sofisticados. A chave é manter o código legível.

function procesarPedido(usuario, tipoProduto, quantidade) {
  // Validação com múltiplas condições
  if (!usuario || !usuario.ativo) {
    return "Usuário inválido";
  }

  if (quantidade <= 0 || quantidade > 1000) {
    return "Quantidade fora do intervalo permitido";
  }

  let desconto = 0;
  let preco = 100;

  // Switch para lógica específica do produto
  switch (tipoProduto) {
    case "digital":
      desconto = 0.05;
      break;
    case "fisico":
      desconto = usuario.premium ? 0.15 : 0.05;
      break;
    case "servico":
      desconto = 0.1;
      break;
    default:
      return "Tipo de produto desconhecido";
  }

  const total = preco * quantidade * (1 - desconto);
  return `Pedido confirmado: R$ ${total.toFixed(2)}`;
}

console.log(procesarPedido({ ativo: true, premium: true }, "fisico", 5));

Guard Clauses: Reduzindo Aninhamento

Guard clauses são retornos antecipados que eliminam condições aninhadas, melhorando bastante a legibilidade:

function validarLogin(email, senha) {
  // Guard clauses
  if (!email) return "Email obrigatório";
  if (!senha) return "Senha obrigatória";
  if (email.length < 5) return "Email inválido";
  if (senha.length < 8) return "Senha muito fraca";

  // Lógica principal
  return "Login bem-sucedido";
}

Expressões de Curto-Circuito

Os operadores && e || avaliam expressões até encontrar um resultado definido. Usar isso conscientemente pode simplificar código:

const usuario = { nome: "João", perfil: null };

// && para executar código apenas se condição for verdadeira
usuario.perfil && console.log("Tem perfil");

// || para atribuir valor padrão
const nomePerfil = usuario.perfil || "Usuário comum";
console.log(nomePerfil); // "Usuário comum"

Embora úteis, não abuse — o operador nullish coalescing (??) é mais seguro para valores padrão, pois ignora apenas null e undefined.

Conclusão

As estruturas de controle if/else e switch são ferramentas fundamentais em JavaScript. Use if para lógica condicional geral e switch para comparações contra múltiplos valores específicos. Sempre prefira === para comparações, evite aninhamento excessivo com guard clauses, e mantenha seu código legível acima de tudo. Dominar essas estruturas e suas variantes avançadas, como operadores ternários e short-circuit evaluation, elevará significativamente a qualidade do seu código.

Referências


Artigos relacionados