Aikido

Daha temiz ve okunabilir bir kod için neden erken dönüşler ve koruma koşullarını kullanmalısınız?

Okunabilirlik

Kural

Kullanım erken iade ve koruma koşullarını kullanın.
Derin iç içe ve geç parametre doğrulama
yap işlevleri zorlaştırmak yapmak okunması ve bakımı daha zor hale gelir.

Desteklenen diller: 45+

Giriş

Koruma koşulları, bir fonksiyonun başında ön koşulları doğrular ve koşullar karşılanmadığında hemen geri döner. Bu, hata durumlarını önceden ele alarak iç içe geçme düzeyini azaltır; böylece ana mantık iç içe geçmeden kalır ve okunması kolaylaşır. Parametreleri fonksiyonun ortasında doğrulayan veya başarı yollarını birden fazla koşullu ifadenin içine yerleştiren fonksiyonlar, okuyucuları birçok girinti düzeyi boyunca bağlamı takip etmeye zorlar.

Neden önemli?

Kod okunabilirliği: Guard koşulları, fonksiyonun sonunda “normal akış”ı iç içe geçme olmaksızın görünür kılar. Okuyucular tüm hata koşullarını baştan görürler; ardından, zihinsel olarak birden fazla iç içe geçmiş koşulu takip etmek zorunda kalmadan, tek bir girinti düzeyinde ana mantığı okurlar.

Bakım ve değişiklik: Derinlemesine iç içe geçmiş koda yeni doğrulama veya hata koşulları eklemek, mevcut mantığın bozulmasını önlemek için dikkatli bir yerleştirme gerektirir. Kodun en üst kısmında yer alan koruma cümleleri, ana mantığa dokunmadan yeni kontroller eklenmesine olanak tanıyarak hata oluşma riskini azaltır.

Kod örnekleri

❌ Uygun değil:

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 kademeli iç içe geçme, ana mantığı (denge hesaplaması) fonksiyonun derinliklerinde gizliyor. Her hata durumu, bir girinti kademesi daha ekliyor ve bu da normal akışın bir bakışta bulunmasını ve anlaşılmasını zorlaştırıyor.

✅ Uygunluk:

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 };
}

Bunun önemi: Koruma koşulları, erken dönüşlerle tüm ön koşulları doğrular ve fonksiyonun tek bir girinti düzeyinde kalmasını sağlar. Ana akış (bakiye kesintisi), iç içe geçme olmaksızın son kısımda açıkça görülebilir; bu da fonksiyonun okunmasını ve değiştirilmesini kolaylaştırır.

Sonuç

Guard koşullarını kullanarak fonksiyonların başında girdileri doğrulayın ve hata durumlarını işleyin. Koşullar karşılanmadığında, başarı yolunu iç içe geçirmek yerine erken dönüş yapın. Bu, kodun düz ve okunabilir kalmasını sağlar ve mevcut mantığı bozmadan değiştirilmesini kolaylaştırır.

Sık Sorulan Sorular

Sorularınız mı var?

Birden fazla dönüş değeri, fonksiyonların anlaşılmasını zorlaştırmaz mı?

Hayır. Eski “tek dönüş” kuralı, kaynakların manuel olarak temizlendiği dönemlerden kalma bir kuraldır. Modern diller, temizleme işlemini otomatik olarak gerçekleştirir. Hata durumlarında birden fazla erken dönüş yapmak, yürütmenin nereden çıktığını bulmak için iç içe geçmiş koşul ifadelerini takip etmekten daha net bir amaç ortaya koyar.

Koruma maddeleri istisna mı atmalı, yoksa hata değerleri mi döndürmeli?

Bağlama bağlıdır. Beklenmedik hatalar (programlama hataları, sistem arızaları) için istisnalar kullanın. Beklenen doğrulama hataları (geçersiz girdi, iş kuralı ihlalleri) için hata değerleri döndürün. Guard cümleleri her iki yaklaşımla da kullanılabilir; önemli olan, fonksiyonun başlangıcında hızlı bir şekilde hata vermesidir.

Peki ya birden fazla return deyiminin performansı ne durumda?

Hiçbir etkisi yoktur. Derleyiciler ve yorumlayıcılar, kaç tane olursa olsun, return deyimlerini aynı şekilde optimize eder. Erken dönüşler, ön koşulların karşılanmaması durumunda gereksiz işlemleri önleyerek performansı gerçekten artırabilir.

Guard cümlelerinde karmaşık doğrulama mantığını nasıl ele alabilirim?

Doğrulama işlemlerini ayrı işlevlere ayırın: if (!isValidAmount(amount)) return error;. Bu, karmaşık doğrulama mantığını kapsülleştirirken koruma koşullarının okunabilirliğini sağlar. Her doğrulama işlevi kendi testlerine ve belgelerine sahip olabilir.

Ya geri dönmeden önce temizleme koduna ihtiyacım olursa?

try-finally bloklarını veya dile özgü temizleme mekanizmalarını (Go’da defer, C#’da using, Python’da bağlam yöneticileri) kullanın. Guard koşulları try bloklarının içine, temizleme işlemleri ise finally bloğuna yerleştirilir. Bu yapı, temizleme işlemlerinin gerçekleştirilmesini sağlarken erken dönüşler sayesinde düz bir yapıya sahip kalır.

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.