Nullable Types ve Null Coalescing Operatörleri

C#’ta Nullable Types (Boş Değer Alabilen Türler), bir değişkenin null (tanımsız) değer alabilmesini sağlar. Null Coalescing (??) ve Null-Conditional (?.) Operatörleri ise null değerlerle çalışırken kodun daha güvenli ve okunaklı olmasını sağlar.

1. Nullable Types (Boş Değer Alabilen Türler)

C#’ta değer tipleri (int, double, bool vb.) varsayılan olarak null olamaz. Ancak Nullable<T> veya ? operatörü kullanılarak null değer alabilen değişkenler oluşturulabilir.

1.1. Nullable Tür Tanımlama

Yöntem 1: Nullable<T> sınıfı kullanarak

Nullable<int> yas = null;
C#

Yöntem 2: ? operatörü ile (Tercih edilen yöntem)

int? yas = null;
C#

Not: string ve diğer referans tipleri zaten null olabilir, Nullable<T> sadece değer tipleri için gereklidir.

1.2. Nullable Türlerle Çalışma

Değer atama ve kontrol

int? sayi = null;

if (sayi.HasValue)
{
    Console.WriteLine($"Sayı: {sayi.Value}");
}
else
{
    Console.WriteLine("Sayı değeri null.");
}
C#
C#
Sayı değeri null.
C#

HasValueDeğişkenin null olup olmadığını kontrol eder.
ValueNullable değişkenin gerçek değerine erişir (null değilse).

1.3. Nullable Türlerde Varsayılan Değer Kullanımı

int? yas = null;
int normalYas = yas ?? 18; // Eğer yas null ise 18 atanır.

Console.WriteLine(normalYas); // 18
C#

?? operatörü, değişken null ise varsayılan bir değer döndürmek için kullanılır.

2. Null Coalescing (??) Operatörü

Null olan bir değişkenin yerine varsayılan değer atamak için ?? operatörü kullanılır.

Söz Dizimi:

değişken ?? varsayılan_değer;
C#

2.1. ?? Operatörü Kullanımı

string isim = null;
string sonuc = isim ?? "Varsayılan İsim";

Console.WriteLine(sonuc); // "Varsayılan İsim"
C#

2.2. ?? Operatörü ile Nullable Türler

int? deger = null;
int sonuc = deger ?? 100;

Console.WriteLine(sonuc); // 100
C#

Özet: ?? operatörü, null olan bir değişken yerine alternatif bir değer döndürür.

3. Null-Conditional (?.) Operatörü

?. operatörü, null değerli bir nesne üzerinde işlem yapmaya çalışırken hata alınmasını önler.

Söz Dizimi:

nesne?.özellik;
C#

3.1. ?. Operatörü Kullanımı

class Kisi
{
    public string Ad { get; set; }
}

Kisi kisi = null;

// Eğer kisi null değilse Ad özelliğini alır, null ise hata vermez.
string isim = kisi?.Ad;

Console.WriteLine(isim ?? "İsim atanmadı."); 
// "İsim atanmadı."
C#

3.2. ?. Operatörü ile Metot Çağrımı

class Kisi
{
    public void SelamVer() => Console.WriteLine("Merhaba!");
}

Kisi kisi = null;

// Eğer kisi null değilse SelamVer metodu çağrılır, aksi halde hata vermez.
kisi?.SelamVer();
C#

Çıktı: (Boş, hata vermez)

3.3. ?. Operatörü ile Dizi Elemanlarına Erişim

int[] sayilar = null;
Console.WriteLine(sayilar?[0]); 
// null döner, hata vermez.
C#

Özet: ?. operatörü, null olan nesnelerde hata alınmasını önler.

4. ??= Operatörü (Null Atama)

Bir değişkenin değeri null ise, ona yeni bir değer atamak için kullanılır.

Söz Dizimi:

değişken ??= yeni_değer;
C#

4.1. ??= Operatörü Kullanımı

string mesaj = null;
mesaj ??= "Merhaba, dünya!";

Console.WriteLine(mesaj); // "Merhaba, dünya!"
C#

4.2. ??= ile Nullable Türler

int? sayi = null;
sayi ??= 10;

Console.WriteLine(sayi); // 10
C#

Özet: ??= operatörü, değişkenin değeri null ise yeni bir değer atar.

5. Nullable Types, ??, ?. ve ??= Kullanım Karşılaştırması

ÖzellikNullable Types (int?)Null Coalescing (??)Null-Conditional (?.)Null Atama (??=)
Ne işe yarar?Null değer alabilen türler oluşturur.Null ise alternatif değer döndürür.Null nesnelerde hata oluşmasını engeller.Null ise yeni değer atar.
Kullanım SenaryosuNullable değişkenler (int?, double?)Değişken null ise varsayılan değer atamaNesne veya metod null ise hata önlemeDeğişken null ise değer atama
Örnekint? yas = null;int yas = yas ?? 18;string isim = kisi?.Ad;isim ??= "Varsayılan";

6. Kullanım Alanları

Kullanım AlanıÖnerilen Yöntem
Veritabanından gelen nullable değerleri işlemeint? yas = dbData;
Nullable değerler için varsayılan değer belirlemeyas ?? 18;
Nesne null kontrolü yaparak hata önlemenesne?.Metot();
Null olan değişkenlere başlangıç değeri atamadeger ??= 10;