Kural
Bölme işlemlerinden önce böleni kontrol edin.
Sıfıra bölme işlemi çalışma zamanı hatalarına yol açar ve
açık kontrollerle önlenmelidir.
Desteklenen diller: 45+Giriş
Sıfıra bölme, çoğu dilde anlık çalışma zamanı hatalarına neden olarak uygulamaların zarif bir şekilde kapanmasına (graceful degradation) izin vermeden çökmesine yol açar. Kullanıcı girdileri, hesaplanan değerler veya veritabanı sonuçları beklenmeyen bir şekilde sıfır bölenler üretebilir. Sınır durum (edge case) verileri hatayı tetiklediğinde, kontrol edilmeyen tek bir bölme işlemi bile prod ortamındaki servisleri çökletebilir.
Neden önemli?
Sistem kararlılığı: Sıfıra bölme; Java, C ve Python gibi dillerde uygulamanın aniden çökmesine neden olabilir. Prod ortamında bu durum; düşen istekler, kesintiye uğrayan işlemler ve hizmet dışı kalan servisler anlamına gelir. Sıfıra bölme işleminin Sonsuzluk veya NaNdöndürdüğü JavaScript'te bile bu değerler hesaplamalar boyunca yayrılarak yanlış sonuçlara yol açar.
Veri bütünlüğü: Toplu işlem (batch processing) veya veri hatları sırasında bölme hataları meydana geldiğinde, çökme öncesinde kısmi sonuçlar yazılabilir. Bu durum verileri tutarsız durumlarda bırakarak manuel kurtarma gerektirir ve eksik verilere bağımlı olan alt sistemleri potansiyel olarak bozar.
Saldırı yüzeyi: Saldırganlar, servisleri çökertmek amacıyla sıfır bölen üreten girdileri kasıtlı olarak oluşturabilir. Bölenleri doğrulamadan hesaplamalar gerçekleştiren API uç noktaları birer hizmet engkleme (DoS) vektörüne dönüşür. Tek bir kötü amaçlı istek bile tüm servisi erişilemez hale getirebilir.
Kod örnekleri
❌ Kural dışı:
function calculateAverageOrderValue(totalRevenue, orderCount) {
return totalRevenue / orderCount;
}
function calculateConversionRate(conversions, visitors) {
return (conversions / visitors) * 100;
}
Neden yanlış: Her iki fonksiyon da bölen sıfır olduğunda çöker. calculateAverageOrderValue() değeri orderCount 0 olduğunda hata verir ve calculateConversionRate() değeri visitors değeri 0'dır. Bu senaryolar oldukça gerçeğe uygundur: yeni işletmelerin hiç siparişi olmayabilir, kampanyaların hiç ziyaretçisi olmayabilir.
✅ Kurallara uygun:
function calculateAverageOrderValue(totalRevenue, orderCount) {
if (orderCount === 0) {
return 0;
}
return totalRevenue / orderCount;
}
function calculateConversionRate(conversions, visitors) {
if (visitors === 0) {
return 0;
}
return (conversions / visitors) * 100;
}Neden önemli?: Açık kontroller, sıfıra bölme çökmelerini engeller. Bölme işleminin mümkün olmadığı durumlarda fonksiyonlar mantıklı varsayılan değerler (sıfır) döndürür. Uygulama, uç durum girdilerinde bile çalışmaya devam ederek kararlılığını ve erişilebilirliğini korur.
Sonuç
Bölme işlemlerinden önce her zaman bölenleri doğrulayın. İş mantığınıza bağlı olarak uygun varsayılan değerler döndürün, açıklayıcı hatalar fırlatın veya sıfır durumunu ele alın. Özellikle kullanıcı girdileri veya harici veriler söz konusu olduğunda, bölenlerin asla sıfır olmayacağını varsaymayın.

