Regola
Da evitare il nidificazioni livelli di annidamento.
Nidificazione nidificazione rende il codice difficile da leggere e da comprendere.
Lingue supportate: 45+Introduzione
Il codice con quattro, cinque o sei livelli di nidificazione crea un carico cognitivo che rallenta lo sviluppo. Ogni livello di nidificazione rende più difficile tenere traccia delle condizioni attive, dei percorsi di errore e della logica di business. Una nidificazione eccessiva indica spesso la mancanza di astrazioni o di opportunità di utilizzare ritorni anticipati e clausole di protezione.
Perché è importante
Manutenibilità del codice e rischi di bug: l'annidamento profondo crea un "codice a freccia" che spinge la logica fuori dallo schermo, rallentando la revisione del codice. Gli sviluppatori trascurano i casi limite quando modificano il codice annidato perché non riescono a vedere tutte le condizioni che devono essere soddisfatte. Modifiche che sembrano corrette se considerate isolatamente possono invalidare ipotesi formulate diversi livelli più in alto.
Complessità dei test e del debug: ogni livello di nidificazione raddoppia il numero di casi di test necessari per garantire la copertura, causando un'esplosione esponenziale dei percorsi. Le tracce dello stack relative agli errori non mostrano quali condizioni abbiano portato a tale situazione, rendendo difficile la riproduzione dei bug.
Esempi di codice
❌ Non conforme:
function processOrder(order) {
if (order) {
if (order.items && order.items.length > 0) {
if (order.customer) {
if (order.customer.address) {
if (order.paymentMethod) {
if (validatePayment(order.paymentMethod)) {
return submitOrder(order);
}
}
}
}
}
}
return { error: 'Invalid order' };
}
Perché è sbagliato: i sei livelli di nidificazione rendono difficile individuare la logica di business effettiva (l'invio dell'ordine), nascosta in fondo al codice. Ogni verifica di condizione aggiunge un ulteriore livello di indentazione e la gestione degli errori risulta poco chiara, poiché non è indicato quale specifica validazione abbia dato esito negativo.
✅ Conforme:
function processOrder(order) {
if (!order) {
return { error: 'Order is required' };
}
if (!order.items || order.items.length === 0) {
return { error: 'Order must contain items' };
}
if (!order.customer?.address) {
return { error: 'Customer address is required' };
}
if (!order.paymentMethod || !validatePayment(order.paymentMethod)) {
return { error: 'Invalid payment method' };
}
return submitOrder(order);
}
Perché è importante: le clausole di protezione con ritorni anticipati appiattiscono il livello di nidificazione a un unico livello. Ogni validazione è esplicita e restituisce un messaggio di errore specifico. Il percorso normale (invio dell'ordine) è visibile alla fine senza alcuna nidificazione. Il codice è autodocumentante e facile da modificare senza compromettere le condizioni esistenti.
Conclusione
Quando possibile, limita i livelli di nidificazione a tre o meno. Utilizza i ritorni anticipati, le clausole di protezione e le funzioni di supporto per appiattire le strutture profondamente nidificate. Quando ti imbatti in una nidificazione che supera i tre livelli, è il segnale che è necessario rifattorizzare il codice estraendo metodi, invertendo le condizioni o ripensando l'approccio. Il codice piatto è più facile da leggere, testare, debuggare e mantenere rispetto alle alternative profondamente nidificate.

