Regra
Não use quebrar em anéis .
Interromper em em profundamente aninhados em tornam
o fluxo difícil para de sem documentação documentação.
Idiomas suportados: 45+Introdução
Declarações 'break' em loops aninhados criam ambiguidade sobre qual loop é encerrado e sob quais condições. Quando um break aparece profundamente dentro de múltiplos loops, os leitores devem rastrear cuidadosamente para determinar qual loop ele encerra e se os loops externos continuam sendo executados. Essa sobrecarga cognitiva aumenta a cada nível de aninhamento, tornando o código difícil de entender e manter.
Por que isso importa
Manutenibilidade do código: Instruções `break` em loops aninhados obscurecem o fluxo de controle. Futuros mantenedores precisam rastrear mentalmente qual loop é interrompido e o que acontece com os loops externos. Isso se torna propenso a erros ao modificar a lógica do loop ou adicionar novas condições.
Complexidade de depuração: Ao depurar loops aninhados com `breaks`, definir breakpoints e percorrer o código exige a compreensão de caminhos de saída complexos. Um `break` em um loop interno pode impedir a execução de lógicas importantes de limpeza ou validação em loops externos.
Exemplos de código
❌ Não-conforme:
function findUser(users, id) {
let found = null;
for (let i = 0; i < users.length; i++) {
if (users[i].id === id) {
found = users[i];
break; // break is okay, but this pattern is verbose
}
}
return found;
}Por que está errado: O break declaração exige a introdução de uma variável temporária (encontrado) para armazenar o resultado, e então retorná-lo após o loop. Este padrão prolixo adiciona complexidade desnecessária e torna o código mais difícil de seguir em comparação com retornos diretos ou métodos de array.
✅ Compatível:
function findUser(users, id) {
return users.find(user => user.id === id);
}
OR
function findUser(users, id) {
for (let i = 0; i < users.length; i++) {
if (users[i].id === id) {
return users[i];
}
}
return null;
}Por que isso importa: A Opção 1 usa .find() que é conciso e expressa claramente a intenção. A Opção 2 usa retornar para sair imediatamente quando o usuário é encontrado, eliminando a necessidade de variáveis temporárias e break declarações. Ambas as abordagens são mais claras e mais fáceis de manter do que o padrão de interrupção.
Conclusão
Extraia a lógica de loops aninhados para funções onde retornar sai claramente de todos os loops. Use métodos de array como find(), some(), ou every() para substituir loops internos quando possível. Se loops aninhados forem inevitáveis, use breaks rotulados ou flags para tornar as condições de saída explícitas.
.avif)
