NullReferenceException, .NET uygulamalarında en sık karşılaşılan hatalardan biridir. Çoğu zaman canlı ortamda, bir müşteri bir düğmeye bastığında ortaya çıkar. Nullable reference types özelliği, bu hataların büyük kısmını kod yazılırken, derleyici uyarılarıyla yakalamanızı sağlar.
Temel fikir
Özellik açıkken, referans türleri varsayılan olarak "null olamaz" kabul edilir. Null olabilecek bir değişkeni açıkça ? ile işaretlersiniz:
string ad = "Ayşe"; // null olamaz
string? ikinciAd = null; // null olabilir
Console.WriteLine(ikinciAd.Length); // derleyici uyarır
Console.WriteLine(ikinciAd?.Length); // güvenli
Derleyici, null olabilecek bir değeri kontrol etmeden kullandığınızda uyarı verir.
Nasıl açılır?
Yeni .NET projelerinde varsayılan olarak açıktır. Proje dosyasında:
<Nullable>enable</Nullable>
İşaretlerin anlamı
string?: Bu değer null olabilir; kullanmadan önce kontrol et.string: Bu değer null olmamalı.!(null-forgiving): "Burada null olmadığını biliyorum, uyarma." Dikkatli kullanılmalıdır; yanlış kullanıldığında korumayı devre dışı bırakır.
Kontrol kalıpları
if (musteri is null) return NotFound();
var sehir = musteri.Adres?.Sehir ?? "Belirtilmemiş";
ArgumentNullException.ThrowIfNull(siparis);
Derleyici bu kontrolleri anlar ve sonraki satırlarda uyarı vermez.
Mevcut projelerde kademeli geçiş
Büyük bir projede özelliği bir anda açmak yüzlerce uyarı üretebilir. Önerilen yol:
- Dosya bazında
#nullable enableile başlayın. - Önce iş kurallarının bulunduğu kritik sınıfları ele alın.
- Yeni yazılan her dosyada özelliği açık tutun.
- Uyarıları zamanla hata olarak değerlendirecek şekilde ayarlayın.
Sık yapılan hatalar
- Uyarıları susturmak için her yere
!koymak. - Veritabanından veya API'den gelen veriyi her zaman dolu varsaymak.
- Entity Framework varlıklarında zorunlu ilişkileri doğru işaretlememek. Bkz. Entity Framework Core.
[Required]gibi doğrulama özniteliklerinin derleme anı kontrolünün yerini tuttuğunu sanmak.
Kod kalitesine etkisi
Nullable işaretleri, kodun niyetini de belgeler: bir metot imzasına bakarak hangi parametrenin boş geçilebileceği anlaşılır. Bu, ekip çalışmasında ve birim testlerinde büyük kolaylık sağlar.
Sık sorulan sorular
Bu özellik çalışma zamanını yavaşlatır mı?
Hayır. Tamamen derleme anında çalışan bir analizdir; üretilen kodu değiştirmez.
Uyarı yoksa null hatası hiç olmaz mı?
Riski büyük ölçüde azaltır ama sıfırlamaz. Dış kaynaklardan gelen veriler ve ! kullanımı hâlâ dikkat gerektirir.
Sonuç
Nullable reference types, en yaygın çalışma zamanı hatasını derleme anına taşır. Mevcut projelerinizi modern C# özelliklerine taşımak için destek alabilirsiniz.