Furkan KapukayaYazılım geliştirme
C# ve .NET2 dk okuma

C# Nullable Reference Types: NullReferenceException'a Derleme Anında Veda

C#'ta nullable reference types özelliğinin mantığı, uyarıların anlamı, ? ve ! işaretlerinin doğru kullanımı, mevcut projelerde kademeli geçiş ve sık yapılan hatalar.

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:

  1. Dosya bazında #nullable enable ile başlayın.
  2. Önce iş kurallarının bulunduğu kritik sınıfları ele alın.
  3. Yeni yazılan her dosyada özelliği açık tutun.
  4. 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.