Kural
Netlik için isimlendirilmiş argümanlar (named
arguments) kullanın. İsimlendirilmiş argümanlar kodu kendiliğinden
açıklayıcı hale getirir ve parametre sırası hatalarını
önler. Fonksiyonların 2-3'ten fazla parametreye veya boolean bayraklara
sahip olduğu durumlarda isimlendirilmiş argümanlar kullanın.
Desteklenen diller: Python, PHPGiriş
Birden fazla parametreye sahip fonksiyonlar, çağrıldıkları yer incelendiğinde belirsizleşebilir. Okumak sendEmail('user@example.com', true, false, 30) , şunun ve şunun ne anlama geldiğini anlamak için fonksiyon imzasının (signature) kontrol edilmesini gerektirir true, false, ve 30 anlamına gelir. İsimlendirilmiş argümanlar, çağrı anında her parametrenin amacını açık hale getirerek bunu çözer. Ayrıca fonksiyon imzaları değiştiğinde parametrelerin yeniden sıralanmasından kaynaklanan hataları önler.
Neden önemli?
Kod sürdürülebilirliği: İsimlendirilmiş argümanlar, sürekli referans kontrolü yapma gereksinimi duymadan çağrı noktasında niyetin ne olduğunu belgelendirir. Şunu gördüğünüzde sendEmail(to: $email, retry: true, async: false, timeout: 30), her bir değerin tam olarak neyi kontrol ettiğini anlarsınız. Bu, kod incelemesi (code review) sırasında kafa karışıklığını ortadan kaldırır ve konumsal argümanları (positional arguments) parametre adlarıyla zihinsel olarak eşleştirmeniz gerekmediği için hata ayıklamayı (debugging) daha hızlı hale getirir.
Güvenlik etkileri: Güvenlik açısından kritik fonksiyonlardaki parametre sıra hataları güvenlik açıkları yaratabilir. $username ve $password parametrelerini yer değiştirmek veya hash'lenmiş şifrenin ait olduğu yere yanlışlıkla düz metin (plaintext) şifre geçirmek, konumsal argümanlarda sessizce başarısız olur. İsimlendirilmiş argümanlar, hangi değerin nereye gideceğini açıkça belirtmenizi zorlayarak bu tehlikeli hataların önüne geçer.
Refaktör güvenliği: Mevcut fonksiyonlara isteğe bağlı parametreler eklemek, bunları sona eklemediğiniz sürece konumsal argümanlar kullanan tüm çağrı noktalarını bozar. İsimlendirilmiş argümanlar; parametre adları tutarlı kaldığı sürece, mevcut kodu bozmadan parametre eklemenize, sıralarını değiştirmenize veya parametreleri güncellemenize olanak tanır. Bu, API'leri daha kararlı ve kod geliştirme süreçlerini daha az riskli hale getirir.
Kod örnekleri
❌ Kural dışı:
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);
Neden yanlış: Çağrı noktası, true değerinin falseve 3 değerinin ne anlama geldiği konusunda hiçbir bağlam sunmaz; bu da sürekli olarak fonksiyon imzasının kontrol edilmesini gerektirir. Yer değiştirmeleri $role ve $password veya $verified ve $sendEmail sessizce başarısız olur ve potansiyel olarak güvenlik sorunlarına yol açabilir.
✅ Kurallara uygun:
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
);
Neden önemli?: Her parametrenin amacı çağrı noktasında açıkça belirtilir, böylece kod kendi kendini belgelemiş olur. Her argümana açıkça bir ad verdiğiniz için parametre sırası hataları imkansız hale gelir ve yeni isteğe bağlı parametreler eklemek mevcut kodu bozmaz.
Sonuç
2-3'ten fazla parametresi, boolean bayrakları veya arka arkaya gelen benzer türleri olan fonksiyonlar için isimlendirilmiş argümanlar kullanın. Çağrı noktasındaki hafif ayrıntı fazlalığı, netlik, güvenilirlik ve sürdürülebilirlik açısından fazlasıyla karşılığını verir. Konumsal argümanları ise parametre sırasının bariz olduğu ve değişme olasılığının düşük olduğu basit fonksiyonlar için saklayın.

