Regola
Non assegnare i compiti all'interno espressioni condizionali.
Mescolare assegnazione e logica logica rende il codice soggetto a errori
e più difficile da comprendere. Assegnare compiti da controlli .
Linguaggi :** JavaScript, TypeScript, Python, PHPIntroduzione
Gli operatori di assegnazione all’interno delle istruzioni condizionali sono una fonte comune di bug che spesso sfuggono ai compilatori e ai linter. L'errore classico consiste nell'utilizzare = (assegnazione) invece di == o === (confronto) in un'istruzione if, ma il problema è più profondo. Anche le assegnazioni intenzionali all'interno delle istruzioni condizionali rendono il codice difficile da leggere, revisionare e debuggare. Quando l'assegnazione e la valutazione avvengono sulla stessa riga, chi legge deve analizzare mentalmente quale operazione abbia la precedenza e quale valore venga effettivamente verificato.
Perché è importante
Perché è importante
Descrizione del bug: Correzione di un errore di battitura === a = non causerà un errore di sintassi, ma modificherà semplicemente il comportamento senza dare alcun avviso. La condizione restituisce il valore assegnato (vero/falso), non il risultato del confronto.
Leggibilità del codice: i lettori si aspettano che le istruzioni condizionali verifichino i valori, non che li modifichino. Quando entrambe le operazioni avvengono contemporaneamente, i responsabili della manutenzione devono individuare quali variabili vengono modificate e in quale momento.
Esempi di codice
❌ Non conforme:
function processUser(userData) {
if (user = userData.user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
if (result = value.match(/^\d{3}-\d{2}-\d{4}$/)) {
return result[0];
}
return false;
}
Perché è sbagliato: le assegnazioni all'interno delle istruzioni condizionali rendono difficile capire se si tratti di una scelta intenzionale o di un errore di battitura. Il primo esempio potrebbe essere un bug in cui si intendeva usare ===, mentre il secondo mescola la corrispondenza con espressioni regolari e l'assegnazione, rendendo difficile seguire il flusso del codice.
✅ Conforme:
function processUser(userData) {
const user = userData.user;
if (user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
const result = value.match(/^\d{3}-\d{2}-\d{4}$/);
if (result) {
return result[0];
}
return false;
}
Perché è importante: Separare l'assegnazione dalla condizione rende l'intento chiarissimo. I lettori capiscono immediatamente che utente viene prima estratto, poi verificato. Il risultato della corrispondenza dell'espressione regolare viene catturato, quindi valutato. Nessuna ambiguità, nessun sovraccarico cognitivo e errori di battitura come = vs === diventa evidente.
Conclusione
Tenere separate le assegnazioni dalle condizioni è una regola semplice che permette di evitare un'intera categoria di bug. Lo sforzo cognitivo richiesto dall'analisi di operazioni combinate supera di gran lunga qualsiasi presunto vantaggio in termini di concisione. Un codice chiaro ed esplicito, in cui l'assegnazione e la valutazione sono operazioni distinte, migliora la leggibilità, riduce i bug e rende più efficace la revisione del codice.

