Null Coalescing vs Null Conditional: C#'ta Doğru Seçimi Yapmak
Kodunda null kontrolü için hangisini daha sık kullanıyorsun?
C#'ta null kontrol etmek için iki araç var: null coalescing (??) ve null conditional (?.)
İkisi de null referansından kurtulmaya çalışıyor ama farklı işler yapıyor. Birini yanlış yerde kullanırsan kod çalışır ama amacını kaçırır.
Null Coalescing (??): Yedek Değer Atama
Bu operatör "eğer sol taraf null ise sağ tarafı kullan" der. Sonuç her zaman bir değerdir, null olamaz.
1string ad = girdi?? "Varsayılan";Eğer girdi null ise ad "Varsayılan" olur. Null coalescing değer döndürür; bir sonraki işleme geçmek için kullanırsın. Veritabanından gelen null bir alan yerine mantıklı bir varsayılan koymak istiyorsan bunu kullan.
Null Conditional (?.): Güvenli Erişim
Bu operatör nesne null değilse işlemi yap, null ise null döndür. Zincir halinde çalışır.
1int? uzunluk = kullanici?.Ad?.Length;Eğer kullanici null ise, Ad'a erişmeye bile çalışmaz; uzunluk null olur. Null conditional işlem yapıp yapamayacağını kontrol eder; bir değer üretmek için değildir.
Hangisi Ne Zaman?
Null conditional kullanırken sonu hep null olabilir. O yüzden sonraki adımda null kontrol lazım:
1int? uzunluk = kullanici?.Ad?.Length;2if (uzunluk.HasValue) {3Console.WriteLine(uzunluk.Value);4}Null coalescing ise garantili bir değer üretir:
1int uzunluk = kullanici?.Ad?.Length?? 0;Şimdi uzunluk asla null değildir.
Pratik Kural
Eğer "bu veri yoksa ne yapacağım?" diye düşünüyorsan null coalescing kullan. Eğer "bu veri varsa işleme devam et, yoksa atla" diyorsan null conditional kullan.
Ayarlar nesnesinden bir değer okuduğunda ve hata yapmazsan ama varsayılana düşmek istersen:
1int timeout = ayarlar?.Timeout?? 5000;Kullanıcının profilini göstermek istiyorsan ama null olabilirse:
1string profil = kullanici?.Profil?.Aciklama?? "Profil boş";Deneyime dayalı bir gözlem: Çoğu geliştirici null conditional'ı zincir halinde kullanıp sonunda null kontrol yapmayı unutuyor. Eğer sonrası kesin bir değer istiyorsan hemen null coalescing ekle. Kodun daha temiz ve hata açığı daha az olur.
2 yorum
null coalescing operatörü çokça kullandığım bir şey Mesela bir APIden veri çekiyorum alanlardan biri eksikse direkt boş string koymak yerine ile şekil vermek çok pratik oluyor
ama bence apiden gelen nulllar için çok güvenilir değil bazı durumlarda sessiz geçip bug oluyor