Kural
Atamaları koşullu ifadelerin içine yerleştirmeyin.
Atama ve koşul mantığının karıştırılması, kodu hataya açık
ve anlaşılması daha zor hale getirir. Atamaları mantıksal kontrollerden
ayın. Desteklenen diller:** JavaScript, TypeScript, Python, PHPGiriş
Koşullu ifadelerin içindeki atama operatörleri, derleyicilerin ve linter'ların sıklıkla gözden kaçırdığı yaygın bir hata kaynağıdır. Klasik hata, bir if ifadesinde == veya === (karşılaştırma) yerine = (atama) kullanmaktır, ancak sorun bundan çok daha derine gider. Koşullar içindeki kasıtlı atamalar bile okunması, incelenmesi ve hata ayıklaması zor kodlar ortaya çıkarır. Atama ve değerlendirme aynı satırda gerçekleştiğinde, okuyucuların hangi işlemin öncelikli olduğunu ve gerçekte hangi değerin test edildiğini zihinsel olarak çözmesi gerekir.
Neden önemli?
Neden önemli?
Hata oluşumu: Şu ifadenin === şuna dönüşmesine neden olan = bir yazım hatası, sözdizimi (syntax) hatasına yol açmaz, yalnızca sessizce davranış değiştirir. Koşul, karşılaştırma sonucunu değil, atanan değeri (truthy/falsy) değerlendirir.
Kod okunabilirliği: Okuyucular koşullu ifadelerin değerleri değiştirmesini değil, test etmesini bekler. Her ikisi aynı anda gerçekleştiğinde, kodu koruyan kişilerin hangi değişkenlerin ne zaman değiştirildiğini takip etmesi gerekir.
Kod örnekleri
❌ Kural dışı:
function processUser(userData) {
if (user = userData.user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
if (result = value.match(/^\d{3}-\d{2}-\d{4}$/)) {
return result[0];
}
return false;
}
Neden yanlış: Koşullar içindeki atamalar, bunun kasıtlı mı yoksa bir yazım hatası mı olduğunu belirsizleştirir. İlk örnek, === amaçlanmışken yapılan bir hata olabilir; ikincisi ise regex eşleştirmesi ile atamayı birleştirerek kod akışının takip edilmesini zorlaştırır.
✅ Kurallara uygun:
function processUser(userData) {
const user = userData.user;
if (user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
const result = value.match(/^\d{3}-\d{2}-\d{4}$/);
if (result) {
return result[0];
}
return false;
}
Neden önemli: Atamayı koşullu ifadeden ayırmak, niyetin kristal netliğinde olmasını sağlar. Okuyucular, önce user ifadesinin alındığını ve ardından test edildiğini hemen görür. Regex eşleşme sonucu yakalanır ve ardından değerlendirilir. Belirsizlik yok, zihinsel yük yok ve = ve === gibi yazım hataları apaçık ortaya çıkıyor.
Sonuç
Atamaları koşullardan ayrı tutmak, tüm bir hata sınıfını önleyen basit bir kuraldır. Birleştirilmiş işlemlerin ayrıştırılmasının getirdiği zihinsel yük, algılanan herhangi bir açıklık/kısalık avantajından ağır basar. Atama ve değerlendirmenin ayrı işlemler olduğu net ve açık kodlar okunabilirliği artırır, hataları azaltır ve kod incelemelerini daha etkili hale getirir.

