Kural
Algılama çelişkili veya imkansız mantık
Kod ki koşulları koşulları koşulları koşulların
zaten ihlal ihlal edildikten ya da varsayar devletlerin
ki olması imkansız verildiğinde koşullar altında kontrol akışı göz önüne alındığında.
Desteklenen diller: 45+Giriş
Çelişkili mantık, kodun önceki kontrol akışına göre zaten doğru veya yanlış olduğu bilinen koşulları kontrol ettiği durumlarda ortaya çıkar. Bu durum, yeniden yapılandırma sonrasında doğrulama işlemlerinin sırası değiştiğinde ya da geliştiricilerin halihazırda hangi garantilerin mevcut olduğunu anlamadan önleyici kontroller eklediklerinde meydana gelir. Bir fonksiyonun kontrol etmesi if (kullanıcı !== null) aradıktan sonra kullanıcı.e-posta çelişkili bir mantığa sahiptir; boşluk kontrolü çok geç yapılmaktadır. Bu mantıksal imkansızlıklar, kodun düzenlenişinde daha derin sorunlara ya da her bir kod yolunun neyi garanti ettiğine dair anlayış eksikliğine işaret etmektedir.
Neden önemli?
Güvenlik açısından sonuçları: Yanlış doğrulama, tehlikeli bir güvenlik yanılsaması yaratır. Güvenlik kontrolleri, veriler çoktan kullanıldıktan sonra devreye girdiğinde, saldırganlar doğrulama işlemi gerçekleşmeden önceki bu zaman aralığından yararlanabilir. Ayrıcalıklı işlemleri gerçekleştirdikten sonra kullanıcı izinlerini doğrulayan kod, gerçek bir koruma sağlamaz; sadece güvenlik konusunda yanıltıcı açıklamalar sunar.
Kodun bakım kolaylığı: Çelişkili mantık, kodun geliştiricinin zihinsel modeliyle uyuşmadığını gösterir. Birisi bir koşulun kontrol edilmesi gerektiğini düşünmüş ancak bunu yanlış yere yerleştirmiş olabilir ya da kod, ilgili kontroller güncellenmeden yeniden düzenlenmiş olabilir. Gelecekteki bakımcılar, gerekli yerlerde doğrulama işlemlerinin mevcut olduğuna güvenemezler; bu da onları, gerçek garantileri anlamak için fonksiyonların tamamını tek tek incelemek zorunda bırakır.
Hata göstergeleri: İmkânsız koşullar nadiren tek başına ortaya çıkar. Bunlar, hata işleme eksikliği, işlev sözleşmeleriyle ilgili yanlış varsayımlar veya başarısız yeniden yapılandırma gibi daha derin sorunlara işaret eder. Asla yürütülmeyen bir kontrol, genellikle bu durumu önlemesi gereken başka bir yerdeki kontrolün eksik olduğu anlamına gelir.
Kod örnekleri
❌ Uygun değil:
function processOrder(order) {
if (!order) {
return { error: 'Order required' };
}
const total = order.items.reduce(
(sum, item) => sum + item.price,
0
);
if (order.items && order.items.length > 0) {
applyDiscount(order);
}
if (total < 0) {
throw new Error('Invalid total');
}
return { total, status: 'processed' };
}
Neden yanlış: Kod şu çağrıyı yapar: order.items.reduce() eğer items, null veya tanımlanmamış, ardından öğelerin mevcut olup olmadığını kontrol eder. Bu total < 0 Bu kontrol ayrıca çelişkili bir durum oluşturmaktadır; zira fiyatları toplarken reduce işlevi her zaman negatif olmayan değerler döndürür.
✅ Uygunluk:
function processOrder(order) {
if (!order || !order.items || order.items.length === 0) {
return { error: 'Valid order with items required' };
}
const hasInvalidPrice = order.items.some(
item => typeof item.price !== 'number' || item.price < 0
);
if (hasInvalidPrice) {
throw new Error('Invalid item prices');
}
const total = order.items.reduce(
(sum, item) => sum + item.price,
0
);
if (order.items.length >= 5) {
applyBulkDiscount(order);
}
return { total, status: 'processed' };
}
Bunun önemi: Tüm doğrulama işlemleri verilerin kullanılmasından önce gerçekleştirilir, kontroller mantıksal sırayla yapılır ve koşullar gerçek gereksinimleri yansıtır. İşlev, girdileri önceden doğrular, ardından geçerli verileri gereksiz veya çelişkili kontroller yapmadan işler.
Sonuç
Verileri kullanmadan önce, sonra değil, doğrulama işlemini gerçekleştirin. Savunmacı gibi görünen ancak verilere erişildikten veya değiştirildikten sonra ortaya çıkan koşulları gözden geçirin. Yeniden yapılandırma yaparken, fonksiyon genelinde mantıksal tutarlılığı korumak için ilgili doğrulama işlemlerini güncelleyin veya kaldırın.

