Regola
Non usare interrompere in cicli .
Break di nei profondamente annidati cicli rendono
il controllo del difficile da seguire senza una chiara documentazione.
Lingue supportate: 45+Introduzione
Le istruzioni "break" nei cicli annidati creano ambiguità riguardo a quale ciclo venga interrotto e a quali condizioni. Quando un interruzione Poiché appare all’interno di più cicli annidati, i lettori devono risalire con attenzione per determinare in quale ciclo termina e se i cicli esterni continuino a essere eseguiti. Questo sforzo cognitivo aumenta con ogni livello di annidamento, rendendo il codice difficile da comprendere e da mantenere.
Perché è importante
Manutenibilità del codice: le istruzioni `break` nei cicli annidati rendono poco chiaro il flusso di controllo. Chi si occuperà in futuro della manutenzione dovrà tenere a mente quale ciclo viene interrotto e cosa succede ai cicli esterni. Ciò aumenta il rischio di errori quando si modifica la logica dei cicli o si aggiungono nuove condizioni.
Complessità del debug: quando si esegue il debug di cicli annidati con istruzioni `break`, l'impostazione dei punti di interruzione e l'esecuzione passo-passo del codice richiedono la comprensione di percorsi di uscita complessi. Un'istruzione `break` in un ciclo interno potrebbe impedire l'esecuzione di importanti logiche di pulizia o di convalida presenti nei cicli esterni.
Esempi di codice
❌ Non 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;
}Perché è sbagliato: Il interruzione L'istruzione richiede l'introduzione di una variabile temporanea (trovato) per conservare il risultato, per poi restituirlo al termine del ciclo. Questo modello, troppo prolisso, aggiunge una complessità superflua e rende il codice più difficile da seguire rispetto ai ritorni diretti o ai metodi degli 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;
}Perché è importante: L'opzione 1 utilizza .find() che è concisa ed esprime chiaramente l'intento. L'opzione 2 utilizza return per terminare immediatamente non appena viene individuato l'utente, eliminando così la necessità di variabili temporanee e interruzione espressioni. Entrambi gli approcci risultano più chiari e più facili da mantenere rispetto al modello "break".
Conclusione
Estrarre la logica dei cicli annidati in funzioni in cui return esce chiaramente da tutti i cicli. Utilizza metodi degli array come find(), some(), oppure every() sostituire i cicli annidati quando possibile. Se i cicli annidati sono inevitabili, utilizzare istruzioni `break` etichettate o flag per rendere esplicite le condizioni di uscita.

