Regla
No utilizar break en bucles .
Romper de en profundamente anidados en hacen
control flujo difícil a seguir sin clara documentación.
Idiomas admitidos: 45+Introducción
Las sentencias break en bucles anidados crean ambigüedad sobre qué bucle se sale y bajo qué condiciones. Cuando un break aparece en lo profundo de múltiples bucles, los lectores deben rastrear cuidadosamente para determinar qué bucle termina y si los bucles externos continúan ejecutándose. Esta sobrecarga cognitiva aumenta con cada nivel de anidamiento, lo que dificulta la comprensión y el mantenimiento del código.
Por qué es importante
Mantenibilidad del código: Las sentencias `break` en bucles anidados oscurecen el flujo de control. Los futuros mantenedores deben seguir mentalmente qué bucle se rompe y qué sucede con los bucles externos. Esto se vuelve propenso a errores al modificar la lógica del bucle o añadir nuevas condiciones.
Complejidad de la depuración: Al depurar bucles anidados con `breaks`, establecer puntos de interrupción y recorrer el código paso a paso requiere comprender rutas de salida complejas. Un `break` en un bucle interno podría impedir que se ejecute lógica importante de limpieza o validación en bucles externos.
Ejemplos de código
❌ No 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 qué es incorrecto: El break una declaración requiere introducir una variable temporal (encontrado) para almacenar el resultado, y luego devolverlo después del bucle. Este patrón verboso añade una complejidad innecesaria y dificulta la comprensión del código en comparación con las devoluciones directas o los métodos de array.
✅ Conforme:
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 qué esto importa? La opción 1 utiliza .find() que es conciso y expresa claramente la intención. La opción 2 utiliza volver para salir inmediatamente cuando se encuentra el usuario, eliminando la necesidad de variables temporales y break declaraciones. Ambos enfoques son más claros y fáciles de mantener que el patrón `break`.
Conclusión
Extrae la lógica de bucles anidados en funciones donde volver sale claramente de todos los bucles. Utilice métodos de array como find(), some(), o every() para reemplazar bucles internos cuando sea posible. Si los bucles anidados son inevitables, utilice 'breaks' etiquetados o banderas para hacer explícitas las condiciones de salida.
.avif)
