Regola
Non sovrascrivere gli della funzione.
Riassegnare i parametri può creare confusione
chi chiama e rendere il debug difficile.
Linguaggi supportati: 45+Introduzione
La riassegnazione dei parametri di una funzione modifica il valore degli argomenti all'interno della funzione stessa, rendendo poco chiaro quale valore il parametro contenga in un dato momento. Durante il debug, non è possibile dare per scontato che un parametro contenga ancora il valore passato dal chiamante. Ciò crea confusione per chiunque legga il codice e rende più difficile individuare i bug, poiché il valore del parametro cambia nel corso dell'esecuzione.
Esempi di codice
❌ Non conforme:
function processUser(user) {
if (!user) {
user = { id: null, name: 'Guest' };
}
user = { ...user, processedAt: Date.now() };
if (user.age < 18) {
user = { ...user, restricted: true };
}
return user;
}Perché è sbagliato: Il utente Il parametro viene riassegnato più volte, rendendo impossibile sapere cosa abbia passato il chiamante originale senza leggere l'intera funzione. Il debug mostra i valori modificati, non l'input effettivo, rendendo difficile risalire alla fonte dei problemi.
✅ Conforme:
function processUser(user) {
const currentUser = user || { id: null, name: 'Guest' };
const processedUser = {
...currentUser,
processedAt: Date.now()
};
if (currentUser.age < 18) {
return { ...processedUser, restricted: true };
}
return processedUser;
}
Perché è importante: Nuove variabili (utente corrente, utente elaborato) assumono valori intermedi, mentre l'originale utente Il parametro rimane invariato. I debugger mostrano il valore effettivo immesso e il codice tiene traccia in modo chiaro delle trasformazioni tramite variabili denominate.
Conclusione
Utilizza nuove variabili per le trasformazioni invece di riassegnare i parametri. In questo modo il flusso dei dati risulta esplicito e l'input originale viene conservato per il debug. La leggera verbosità derivante dalle dichiarazioni di variabili aggiuntive è compensata da una maggiore leggibilità e facilità di debug.

