Control flow

Escopo: transversal. Aplica-se a qualquer linguagem ou stack do projeto.

Controle de fluxo evolui com a complexidade. A ferramenta certa depende de quantas condições existem, se mapeiam valores ou executam ações, e se o fluxo pode precisar de saída antecipada. O princípio é sempre o mesmo: sair cedo na falha, nunca aninhar o caminho feliz.

Conceitos fundamentais

ConceitoO que é
Guard clause (cláusula de guarda)Condição que retorna cedo na falha, antes do caminho feliz
Early return (retorno antecipado)Saída imediata que elimina o else e reduz profundidade de indentação
Arrow antipattern (pirâmide de condições)Aninhamento excessivo de if/else que enterra a lógica principal
ternary (ternário)Operador inline condição ? valorVerdadeiro : valorFalso; limitado a duas alternativas
Lookup table (tabela de mapeamento)Objeto, mapa ou dicionário que substitui chains de if para mapeamento de chave → valor
Fallthrough (queda entre casos)Execução automática do próximo case em switch; bug silencioso quando acidental
Exhaustiveness check (verificação de exaustividade)Garantia de que todos os casos de um tipo são tratados; o compilador avisa quando um falta
Circuit break (saída antecipada de laço)Encerramento do laço no primeiro resultado relevante, sem percorrer o restante

Quando usar cada ferramenta

Ordem crescente de complexidade. Prefira sempre a ferramenta mais simples que resolve o problema.

FerramentaQuando usar
if/elseDois caminhos mutuamente exclusivos; nunca use else após um return
TernárioAtribuição de dois valores possíveis em uma linha; nunca aninhar
Guard clauseSaída antecipada na falha; mantém o caminho feliz sem indentação extra
Lookup / Map / DictionaryMapeamento estático de chave → valor com 3 ou mais entradas; substitui if/else chain
switch / match / whenTrês ou mais casos sobre o mesmo valor; ação por caso ou mapeamento com exaustividade garantida
Circuit break (find, some, any)Busca ou verificação que para no primeiro match; não percorre o restante
for / for-in / foreachIteração com efeito colateral por item; sem índice quando o índice não é usado
whileCritério de parada por condição, sem coleção pré-definida
do-whilePrimeira execução garantida antes de verificar a condição

Veja também

Cada linguagem tem o guia específico com os construtores nativos e exemplos BAD/GOOD:

JavaScript · TypeScript · C# · VB.NET · Python · Go · PHP · Kotlin · Swift · Dart · Rust

Desenvolvido por @thiagocajadev · Fork baseado no repositório pmndrs/docs · Poimandres.