Kural
Derin iç içe geçme seviyelerinden kaçının.
Derin iç içe geçme, kodun okunmasını ve anlaşılmasını zorlaştırır.
Desteklenen diller: 45+Giriş
Dört, beş veya altı seviye iç içe geçmiş kod, geliştirme hızını yavaşlatan bilişsel bir yük oluşturur. Her iç içe geçme seviyesi; aktif koşulları, hata yollarını ve iş mantığını takip etmeyi zorlaştırır. Aşırı iç içe geçme durumu genellikle eksik soyutlamalara veya erken çıkışlar (early returns) ile koruma koşulları (guard clauses) kullanma fırsatlarının kaçırıldığına işaret eder.
Neden önemli?
Kod sürdürülebilirliği ve hata riskleri: Derin iç içe geçme, mantığı ekrandan dışarı iten ve kod incelemesini (review) yavaşlatan "ok kodu" (arrow code) oluşturur. Geliştiriciler, karşılanması gereken tüm koşulları göremedikleri için iç içe geçmiş kodları değiştirirken uç durumları (edge cases) gözden kaçırabilirler. Yalnızca kendi bağlamında doğru görünen değişiklikler, birkaç seviye yukarıda kurulmuş varsayımları bozabilir.
Test etme ve hata ayıklama (debugging) karmaşıklığı: Her iç içe geçme seviyesi, kapsama için gereken test vakalarını iki katına çıkararak üstel bir yol patlamasına yol açar. Hatalardan kaynaklanan yığın izlemeleri (stack traces), hangi koşulların oraya yol açtığını göstermez; bu da hataların yeniden üretilmesini zorlaştırır.
Kod örnekleri
❌ Kural dışı:
function processOrder(order) {
if (order) {
if (order.items && order.items.length > 0) {
if (order.customer) {
if (order.customer.address) {
if (order.paymentMethod) {
if (validatePayment(order.paymentMethod)) {
return submitOrder(order);
}
}
}
}
}
}
return { error: 'Invalid order' };
}
Neden yanlış: Altı seviyeli iç içe geçme, en altta gömülü olan gerçek iş mantığını (sipariş gönderme) görmeyi zorlaştırır. Her koşul kontrolü başka bir girinti katmanı ekler ve hata yönetimi belirsizdir çünkü hangi spesifik doğrulamanın başarısız olduğunu gösteren bir belirti yoktur.
✅ Kurallara uygun:
function processOrder(order) {
if (!order) {
return { error: 'Order is required' };
}
if (!order.items || order.items.length === 0) {
return { error: 'Order must contain items' };
}
if (!order.customer?.address) {
return { error: 'Customer address is required' };
}
if (!order.paymentMethod || !validatePayment(order.paymentMethod)) {
return { error: 'Invalid payment method' };
}
return submitOrder(order);
}
Neden önemli: Erken dönüşler (early returns) içeren koruma koşulları (guard clauses), iç içe geçmeyi tek bir seviyeye indirir. Her doğrulama açıktır ve belirli bir hata mesajı döndürür. Başarılı yol (sipariş gönderme) herhangi bir iç içe geçme olmadan en sonda görünür. Kod, kendi kendini belgeler ve mevcut koşulları bozmadan değiştirmek kolaydır.
Sonuç
Mümkün olduğunca iç içe geçme seviyelerini üç veya daha azla sınırlayın. Derinlemesine iç içe geçmiş yapıları düzleştirmek için erken dönüşler, koruma koşulları ve yardımcı fonksiyonlar (helper functions) kullanın. Üç seviyeden fazla iç içe geçmeyle karşılaştığınızda, bu durum; metotları dışarı çıkararak (extracting methods), koşulları tersine çevirerek veya yaklaşımı yeniden düşünerek yeniden yapılandırma (refactor) yapmanız gerektiğinin bir sinyalidir. Düz kod, derinlemesine iç içe geçmiş alternatiflere kıyasla okunması, test edilmesi, hata ayıklanması ve sürdürülmesi daha kolay bir koddur.

