Regola
Utilizzo argomenti argomenti per chiarezza
Argomenti argomenti rendono il codice autodocumentante
e impediscono parametro ordine errori.
Utilizzare argomenti argomenti quando le funzioni hanno più
di 2-3 parametri o booleani .
Linguaggi supportati: Python, PHPIntroduzione
Le funzioni con più parametri risultano poco chiare quando si osserva il punto di chiamata. Leggere sendEmail('user@example.com', true, false, 30) richiede di consultare la firma della funzione per capire cosa vero, false, e 30 significa. Gli argomenti denominati risolvono questo problema rendendo esplicito lo scopo di ciascun parametro nel punto di chiamata. Inoltre, impediscono che si verifichino bug dovuti al riordino dei parametri quando cambiano le firme delle funzioni.
Perché è importante
Manutenibilità del codice: Gli argomenti denominati chiariscono l'intento nel punto di chiamata senza richiedere una verifica costante dei riferimenti. Quando si vede sendEmail(to: $email, retry: true, async: false, timeout: 30), si capisce esattamente a cosa corrisponde ciascun valore. Ciò elimina ogni confusione durante la revisione del codice e velocizza il debug, poiché non è necessario associare mentalmente gli argomenti posizionali ai nomi dei parametri.
Implicazioni in materia di sicurezza: Errori nell'ordine dei parametri nelle funzioni critiche per la sicurezza possono creare vulnerabilità. Lo scambio di $username e $password I parametri, o l'inserimento accidentale della password in chiaro al posto di quella con hash, causano un errore silenzioso con gli argomenti posizionali. Gli argomenti denominati obbligano a specificare esplicitamente quale valore va in quale posizione, evitando così questi pericolosi errori.
Sicurezza nella rifattorizzazione: l'aggiunta di parametri opzionali alle funzioni esistenti compromette il funzionamento di tutti i punti di chiamata con argomenti posizionali, a meno che non vengano inseriti alla fine. Gli argomenti denominati consentono di aggiungere, riordinare o modificare i parametri senza compromettere il codice esistente, purché i nomi dei parametri rimangano coerenti. Ciò 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é è sbagliato: Il sito da cui proviene la chiamata non fornisce alcun contesto su cosa sia vero, false, e 3 significano che è necessario fare costante riferimento alla firma della funzione. Scambiando $ruolo e $password oppure $verificato e $sendEmail si arresterebbe in modo silenzioso, 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é è importante: lo scopo di ogni parametro è esplicito nel punto di chiamata, rendendo il codice autodocumentante. È impossibile commettere errori nell'ordine dei parametri, poiché ogni argomento viene denominato esplicitamente, e l'aggiunta di nuovi parametri opzionali non comprometterà il funzionamento del codice esistente.
Conclusione
Utilizza argomenti con nome per le funzioni con più di 2-3 parametri, flag booleani o tipi simili che compaiono in successione. La leggera verbosità nel punto di chiamata si ripaga in termini di chiarezza, sicurezza e manutenibilità. Riserva gli argomenti posizionali alle funzioni semplici in cui l'ordine dei parametri è ovvio e difficilmente soggetto a modifiche.

