Kural
İç döngülerde break ifadesi kullanmayın.
Derinlemesine iç içe geçmiş döngülerdeki Break ifadeleri
kontrol akışını açık bir belgeye gerek duymadan takipetmeyi zorlaştırır.
Desteklenen diller: 45+Giriş
İç içe geçmiş döngülerdeki break ifadeleri, hangi döngünün ve hangi koşullar altında sonlandırıldığı konusunda belirsizlik yaratır. Bir break birden fazla döngünün derinliklerinde yer aldığında, okuyucular hangi döngüyü sonlandırdığını ve dış döngülerin yürütülmeye devam edip etmediğini anlamak için geriye dönük olarak dikkatli bir şekilde inceleme yapmak zorunda kalır. Bu bilişsel yük, her iç içe geçme seviyesiyle birlikte artarak kodun anlaşılmasını ve bakımının yapılmasını zorlaştırır.
Neden önemli?
Kodun sürdürülebilirliği: İç içe döngülerdeki break ifadeleri, kontrol akışını karmaşıklaştırır. Kodu daha sonra inceleyecek geliştiricilerin hangi döngünün kırıldığını ve dış döngülere ne olduğunu zihinsel olarak takip etmesi gerekir. Bu durum, döngü mantığı değiştirilirken veya yeni koşullar eklenirken hataya açık hale gelir.
Hata ayıklama karmaşıklığı: Break ifadeleri içeren iç içe döngülerde hata ayıklarken kesme noktaları (breakpoint) koymak ve kodda adım adım ilerlemek, karmaşık çıkış yollarının anlaşılmasını gerektirir. İç döngüdeki bir break, dış döngülerdeki önemli temizleme veya doğrulama mantığının çalışmasını engelleyebilir.
Kod örnekleri
❌ Kural dışı:
function findUser(users, id) {
let found = null;
for (let i = 0; i < users.length; i++) {
if (users[i].id === id) {
found = users[i];
break; // break is okay, but this pattern is verbose
}
}
return found;
}Neden yanlış: The break ifadesi, sonucu tutmak için geçici bir değişken (bulundu) tanımlanmasını ve ardından döngüden sonra döndürülmesini gerektirir. Bu ayrıntılı kalıp gereksiz karmaşıklık ekler ve doğrudan return ifadelerine veya dizi metotlarına kıyasla kodun takip edilmesini zorlaştırır.
✅ Kurallara uygun:
function findUser(users, id) {
return users.find(user => user.id === id);
}
OR
function findUser(users, id) {
for (let i = 0; i < users.length; i++) {
if (users[i].id === id) {
return users[i];
}
}
return null;
}Neden önemli: Seçenek 1, .find() kullanır; bu hem özet hem de niyetini açıkça ifade eder. Seçenek 2, return kullanarak kullanıcı bulunduğunda hemen çıkar ve geçici değişkenler ile break ifadelerine olan ihtiyacı ortadan kaldırır. Her iki yaklaşım da break kalıbından daha anlaşılır ve sürdürülebilirdir.
Sonuç
İç içe döngü mantığını, return ifadesinin tüm döngülerden açıkça çıktı find(), some()alabileceği fonksiyonlara taşıyın veya mümkün olduğunda iç döngüleri every() gibi dizi metotlarıyla değiştirin. İç içe döngüler kaçınılmazsa, çıkış koşullarını açık hale getirmek için etiketli break'ler (labeled breaks) veya bayraklar (flags) kullanın.

