Kural
Erken return ve guard clause kullanın.
Derin iç içe yapılar ve geç parametre
doğrulaması, fonksiyonların okunmasını ve bakımını zorlaştırır.
Desteklenen diller: 45+Giriş
Guard clause'lar, bir fonksiyonun başında ön koşulları doğrular ve koşullar sağlanmazsa hemen return eder. Bu, hata durumlarını en başta ele alarak iç içe yapıları (nesting) düzleştirir ve ana mantığı hiçbir şeye bağlı olmadan, kolayca okunabilir halde bırakır. Parametreleri yarı yolda doğrulayan veya başarı yollarını birden fazla koşulun içine gömen fonksiyonlar, okuyucuların birçok girinti seviyesinde bağlamı takip etmesini zorlaştırır.
Neden önemli?
Kod okunabilirliği: Guard clause'lar, ana yolun (happy path) fonksiyonun sonunda iç içe yapı olmaksızın görünmesini sağlar. Okuyucular tüm hata koşullarını baştan görür ve ardından ana mantığı, birden fazla iç içe koşulu zihinsel olarak takip etmek zorunda kalmadan tek bir girinti seviyesinde okur.
Bakım ve değişiklik: Derinlemesine iç içe geçmiş koda yeni doğrulama veya hata koşulları eklemek, mevcut mantığı bozmamak için dikkatli bir yerleşim gerektirir. Üst kısımda yer alan guard clause'lar, ana mantığa dokunmadan yeni kontroller eklenmesini sağlar ve hata riskini azaltır.
Kod örnekleri
❌ Kural dışı:
function processPayment(user, amount) {
if (user) {
if (user.isActive) {
if (amount > 0) {
if (user.balance >= amount) {
user.balance -= amount;
return { success: true, newBalance: user.balance };
} else {
return { success: false, error: 'Insufficient funds' };
}
} else {
return { success: false, error: 'Invalid amount' };
}
} else {
return { success: false, error: 'Inactive user' };
}
} else {
return { success: false, error: 'User required' };
}
}Neden yanlış: Dört seviyeli iç içe yapı, ana mantığı (bakiye düşme işlemi) fonksiyonun derinliklerine saklar. Her hata koşulu başka bir girinti seviyesi ekleyerek ana yolun bulunmasını ve bir bakışta anlaşılmasını zorlaştırır.
✅ Kurallara uygun:
function processPayment(user, amount) {
if (!user) {
return { success: false, error: 'User required' };
}
if (!user.isActive) {
return { success: false, error: 'Inactive user' };
}
if (amount <= 0) {
return { success: false, error: 'Invalid amount' };
}
if (user.balance < amount) {
return { success: false, error: 'Insufficient funds' };
}
user.balance -= amount;
return { success: true, newBalance: user.balance };
}
Neden önemli: Guard clause'lar erken return'ler ile tüm ön koşulları doğrular ve fonksiyonu tek bir girinti seviyesinde tutar. Ana yol (bakiye düşme işlemi) iç içe yapı olmadan sonda açıkça görünür, bu da fonksiyonun okunmasını ve değiştirilmesini kolaylaştırır.
Sonuç
Guard clause'lar kullanarak girdileri doğrulayın ve hata durumlarını fonksiyonların başında ele alın. Başarı yolunu iç içe sokmak yerine, koşullar başarısız olduğunda erken return yapın. Bu, mevcut mantığı bozmadan kodun sade, okunabilir ve kolayca değiştirilebilir olmasını sağlar.

