Regola
Utilizzo il restituzioni e clausola .
Nidificazione annidamento e parametro parametro convalida
rendono le funzioni più da leggere e da mantenere.
Lingue supportate: 45+Introduzione
Le clausole di controllo verificano le precondizioni all'inizio di una funzione e restituiscono immediatamente un valore se le condizioni non sono soddisfatte. Ciò appiattisce il livello di nidificazione gestendo i casi di errore in anticipo, lasciando la logica principale non nidificata e di facile lettura. Le funzioni che verificano i parametri a metà del codice o che annidano i percorsi di successo all'interno di più condizioni costringono i lettori a seguire il contesto attraverso numerosi livelli di indentazione.
Perché è importante
Leggibilità del codice: le clausole di protezione rendono visibile il percorso normale alla fine della funzione senza annidamenti. I lettori vedono subito tutte le condizioni di errore, per poi leggere la logica principale a un unico livello di indentazione senza dover tenere a mente condizioni annidate multiple.
Manutenzione e modifica: l'aggiunta di nuove condizioni di validazione o di errore a un codice profondamente annidato richiede un inserimento accurato per evitare di compromettere la logica esistente. Le clausole di protezione inserite all'inizio consentono di aggiungere nuovi controlli senza interferire con la logica principale, riducendo il rischio di introdurre bug.
Esempi di codice
❌ Non conforme:
function processPayment(user, amount) {
if (user) {
if (user.isActive) {
if (amount > 0) {
if (user.balance >= amount) {
user.balance -= amount;
return { success: true, newBalance: user.balance };
} else {
return { success: false, error: 'Insufficient funds' };
}
} else {
return { success: false, error: 'Invalid amount' };
}
} else {
return { success: false, error: 'Inactive user' };
}
} else {
return { success: false, error: 'User required' };
}
}Perché è sbagliato: i quattro livelli di nidificazione nascondono la logica principale (il calcolo del saldo) nelle profondità della funzione. Ogni condizione di errore aggiunge un altro livello di indentazione, rendendo difficile individuare e comprendere a colpo d'occhio il percorso normale.
✅ Conforme:
function processPayment(user, amount) {
if (!user) {
return { success: false, error: 'User required' };
}
if (!user.isActive) {
return { success: false, error: 'Inactive user' };
}
if (amount <= 0) {
return { success: false, error: 'Invalid amount' };
}
if (user.balance < amount) {
return { success: false, error: 'Insufficient funds' };
}
user.balance -= amount;
return { success: true, newBalance: user.balance };
}
Perché è importante: le clausole di protezione verificano tutte le precondizioni con ritorni anticipati, mantenendo la funzione a un unico livello di indentazione. Il percorso normale (addebito sul saldo) è chiaramente visibile alla fine senza annidamenti, rendendo la funzione facile da leggere e modificare.
Conclusione
Con le clausole di protezione, verifica la validità degli input e gestisci i casi di errore all'inizio delle funzioni. Se le condizioni non vengono soddisfatte, esci anticipatamente dalla funzione, invece di annidare il percorso di successo. In questo modo il codice rimane lineare, leggibile e facile da modificare senza compromettere la logica esistente.

