Regola
Usa argomenti con nome per
maggiore chiarezza. Gli argomenti con nome rendono il codice autoesplicativo
e prefono errori nell'ordine dei parametri. Usa argomenti
con nomequando le funzioni hanno più
di 2-3parametri o flag booleani.
Linguaggi supportati: Python, PHPIntroduzione
Le funzioni con parametri multipli diventano poco chiare quando si guarda al punto in cui vengono chiamate. La lettura di sendEmail('user@example.com', true, false, 30) richiede di consultare la firma della funzione per capire cosa true, false, e 30 significhino. Gli argomenti con nome risolvono questo problema rendendo esplicito lo scopo di ciascun parametro nel punto di chiamata. Prevengono inoltre bug dovuti alla riordinazione dei parametri quando le firme delle funzioni cambiano.
Perché è importante
Manutenibilità del codice: Gli argomenti con nome documentano l'intento nel punto di chiamata senza richiedere un continuo controllo di riferimento. Quando vedi sendEmail(to: $email, retry: true, async: false, timeout: 30), capisci esattamente cosa controlla ciascun valore. Questo elimina la confusione durante la code review e velocizza il debug, poiché non è necessario mappare mentalmente gli argomenti posizionali ai nomi dei parametri.
Implicazioni di sicurezza: Errori nell'ordine dei parametri in funzioni critiche per la sicurezza possono creare vulnerabilità. Invertire l' $username e $password parametri, o passare accidentalmente la password in chiaro laddove è richiesta la password sottoposta a hash, fallisce silenziosamente con gli argomenti posizionali. Gli argomenti con nome ti costringono a dichiarare esplicitamente quale valore va assegnato a ciascun parametro, prevenendo questi pericolosi errori.
Sicurezza del refactoring: L'aggiunta di parametri opzionali alle funzioni esistenti interrompe tutti i punti di chiamata che utilizzano argomenti posizionali, a meno che non vengano accodati alla fine. Gli argomenti con nome consentono di aggiungere, riordinare o modificare i parametri senza compromettere il codice esistente, a patto che i nomi dei parametri rimangano coerenti. Questo rende le API più stabili e l'evoluzione meno rischiosa.
Esempi di codice
❌ Non conforme:
function createUser($email, $password, $role, $verified, $sendEmail, $retryCount) {
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
$user = User::create([
'email' => $email,
'password' => $hashedPassword,
'role' => $role,
'verified' => $verified
]);
if ($sendEmail) {
sendWelcomeEmail($user->email, $retryCount);
}
return $user;
}
// Unclear what each parameter means
createUser('user@example.com', 'secret123', 'admin', true, false, 3);
Perché è errato: Il punto di chiamata non fornisce alcun contesto su cosa significhino true, falsee 3, richiedendo una consultazione costante della firma della funzione. L'inversione di $role e $password oppure $verified e $sendEmail fallirebbe silenziosamente, creando potenzialmente problemi di sicurezza.
✅ Conforme:
function createUser(
string $email,
string $password,
string $role = 'user',
bool $verified = false,
bool $sendEmail = true,
int $retryCount = 3
) {
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
$user = User::create([
'email' => $email,
'password' => $hashedPassword,
'role' => $role,
'verified' => $verified
]);
if ($sendEmail) {
sendWelcomeEmail($user->email, $retryCount);
}
return $user;
}
// Self-documenting call site
createUser(
email: 'user@example.com',
password: 'secret123',
role: 'admin',
verified: true,
sendEmail: false,
retryCount: 3
);
Perché questo è importante: Lo scopo di ogni parametro è esplicito nel punto di chiamata, rendendo il codice auto-documentante. Gli errori nell'ordine dei parametri diventano impossibili poiché si assegna un nome esplicito a ciascun argomento, e l'aggiunta di nuovi parametri opzionali non romperà il codice esistente.
Conclusione
Utilizza gli argomenti con nome per le funzioni con più di 2-3 parametri, flag booleani o tipi simili che compaiono consecutivamente. La leggera verbosità nel punto di chiamata viene ampiamente ripagata in termini di chiarezza, sicurezza e manutenibilità. Riserva gli argomenti posizionali a funzioni semplici in cui l'ordine dei parametri è ovvio e improbabile che cambi.

