Como Usar Estruturas de Controle: if, else, switch e match em Produção Já leu

Estruturas de Controle: Dominando o Fluxo do Seu Código Estruturas de controle são o coração de qualquer programa. Elas permitem que seu código tome decisões, execute blocos específicos sob certas condições e evite repetição desnecessária de lógica. Nesta aula, exploraremos as quatro principais: , , e . Começaremos com as mais tradicionais e evoluiremos para a mais moderna. if e else: A Base da Tomada de Decisão Conceito Fundamental O executa um bloco de código somente se uma condição for verdadeira. O oferece uma alternativa quando a condição é falsa. Essa é a estrutura mais fundamental da programação. Boas Práticas Sempre mantenha suas condições simples e legíveis. Use para múltiplas condições, mas quando tiver muitas branches, considere usar . Evite condições muito complexas — se necessário, extraia a lógica em funções separadas para melhorar a legibilidade. switch: Alternativa Elegante para Múltiplas Condições Quando Usar switch O é ideal quando você precisa comparar uma única variável contra múltiplos valores específicos. É

Estruturas de Controle: Dominando o Fluxo do Seu Código

Estruturas de controle são o coração de qualquer programa. Elas permitem que seu código tome decisões, execute blocos específicos sob certas condições e evite repetição desnecessária de lógica. Nesta aula, exploraremos as quatro principais: if, else, switch e match. Começaremos com as mais tradicionais e evoluiremos para a mais moderna.

if e else: A Base da Tomada de Decisão

Conceito Fundamental

O if executa um bloco de código somente se uma condição for verdadeira. O else oferece uma alternativa quando a condição é falsa. Essa é a estrutura mais fundamental da programação.

idade = 18
if idade >= 18:
    print("Você é maior de idade")
else:
    print("Você é menor de idade")
let temperatura = 35;
if (temperatura > 30) {
    console.log("Está quente");
} else if (temperatura > 20) {
    console.log("Está agradável");
} else {
    console.log("Está frio");
}

Boas Práticas

Sempre mantenha suas condições simples e legíveis. Use else if para múltiplas condições, mas quando tiver muitas branches, considere usar switch. Evite condições muito complexas — se necessário, extraia a lógica em funções separadas para melhorar a legibilidade.

int nota = 85;
if (nota >= 90) {
    System.out.println("A");
} else if (nota >= 80) {
    System.out.println("B");
} else if (nota >= 70) {
    System.out.println("C");
} else {
    System.out.println("F");
}

switch: Alternativa Elegante para Múltiplas Condições

Quando Usar switch

O switch é ideal quando você precisa comparar uma única variável contra múltiplos valores específicos. É mais legível que vários else if e geralmente mais eficiente. A grande diferença: switch usa igualdade exata, não condições lógicas complexas.

dia = 3
match dia:
    case 1:
        print("Segunda-feira")
    case 2:
        print("Terça-feira")
    case 3:
        print("Quarta-feira")
    case _:
        print("Outro dia")
let fruta = "maçã";
switch (fruta) {
    case "maçã":
        console.log("R$ 3,00");
        break;
    case "banana":
        console.log("R$ 2,00");
        break;
    case "laranja":
        console.log("R$ 2,50");
        break;
    default:
        console.log("Fruta não encontrada");
}

Detalhe Crítico: break

Em linguagens como C, Java e JavaScript, sempre use break após cada caso. Sem ele, a execução "cai" para o próximo caso (fall-through). Isso é um erro comum que pode levar a bugs difíceis de encontrar. Python 3.10+ e Rust não têm esse problema.

int opcao = 2;
switch (opcao) {
    case 1:
        System.out.println("Opção 1");
        break;
    case 2:
        System.out.println("Opção 2");
        break;
    default:
        System.out.println("Opção inválida");
}

match: A Evolução Moderna

A Nova Geração

match é a versão moderna e mais segura de switch. Disponível em Python 3.10+, Rust, Scala e outras linguagens, match força você a lidar com todos os casos possíveis (exhaustividade), elimina o risco de fall-through e permite padrões muito mais complexos.

# Python 3.10+
status = "processando"
match status:
    case "ativo":
        print("Sistema rodando normalmente")
    case "inativo":
        print("Sistema desligado")
    case "processando":
        print("Aguarde...")
    case _:
        print("Status desconhecido")

Padrões Avançados

match vai além de igualdade simples. Você pode usar destructuring, guards (condições adicionais), e até padrões estruturais. Isso o torna muito mais poderoso que switch tradicional.

# Python com padrões avançados
ponto = (0, 5)
match ponto:
    case (0, 0):
        print("Origem")
    case (0, y):
        print(f"Eixo Y: {y}")
    case (x, 0):
        print(f"Eixo X: {x}")
    case (x, y):
        print(f"Ponto: ({x}, {y})")
// Rust - match com guards
let numero = 15;
match numero {
    n if n < 0 => println!("Negativo"),
    n if n == 0 => println!("Zero"),
    n if n < 10 => println!("Dígito"),
    _ => println!("Número maior"),
}

Escolhendo a Estrutura Correta

A escolha entre if, switch e match depende do seu caso:

  • if/else: Use para lógica condicional complexa com múltiplas condições diferentes. Exemplo: if (idade > 18 && ativo).
  • switch: Use quando comparar uma variável contra vários valores específicos. Rápido de ler, mas limitado a igualdade.
  • match: Use quando disponível. É type-safe, obriga tratar todos os casos e permite padrões sofisticados.
# Exemplo prático: classificar usuário
class Usuario:
    def __init__(self, nome, tipo, ativo):
        self.nome = nome
        self.tipo = tipo
        self.ativo = ativo

usuario = Usuario("João", "admin", True)

# if/else para lógica complexa
if usuario.ativo and usuario.tipo == "admin":
    print("Acesso total concedido")
elif usuario.ativo and usuario.tipo == "user":
    print("Acesso limitado")
else:
    print("Acesso negado")

Conclusão

Dominar estruturas de controle é essencial para programar bem. Primeiro ponto: if e else são universais e fundamentais — domine-os perfeitamente. Segundo ponto: switch é uma alternativa elegante para comparações múltiplas contra um único valor. Terceiro ponto: match (quando disponível) é a evolução natural, oferecendo segurança de tipo e padrões poderosos. Na prática, você usará if na maioria das vezes, recorrerá a switch ocasionalmente, e apreciará match quando trabalhar em linguagens modernas. O importante é entender quando cada uma brilha e escolher com propósito.

Referências


Artigos relacionados