Nullable Tipler
Her değişken her zaman bir değere sahip olmayabilir. Bazen bir fonksiyon aradığını bulamaz, bir sorgu sonuç döndürmez veya bir alan henüz atanmamıştır. saQut bu durumları nullable tipler ile yönetir.
Nullable tanımlamak
Bölüm başlığı “Nullable tanımlamak”Herhangi bir tipin sonuna ? ekleyerek nullable yapabilirsin:
int? belkiSayi = 42;belkiSayi = null; // geçerli
string? belkiIsim = "Ali";belkiIsim = null; // geçerliNullable olmayan bir değişken null alamaz:
int normalSayi = 42;// normalSayi = null; // derleme hatasıBu denetim tamamen derleme zamanında yapılır. Denetim çalışma zamanına maliyet
eklemez ve null olamaz bir değişken, çalışma boyunca hiçbir anda null
tutamaz.
Null güvenliği: önce kontrol etmelisin
Bölüm başlığı “Null güvenliği: önce kontrol etmelisin”Nullable bir değeri doğrudan kullanamazsın. Derleyici, değeri kullanmadan önce
null olmadığını kanıtlamanı ister:
int? x = degerGetir();
// print(x); // derleme hatası: x null olabilir
if (x != null) { print(x); // geçerli, x burada null olmayacak biçimde daraltıldı}if (x != null) bloğunun içinde tip denetleyici tipi int?’ten int’e
daraltır. Buna akışa duyarlı tiplendirme denir.
Bileşik tiplerle nullable
Bölüm başlığı “Bileşik tiplerle nullable”Struct, dizi ve metin tiplerinin hepsi nullable olabilir:
struct Nokta { int x; int y; }
Nokta? belkiNokta = null;belkiNokta = Nokta(10, 20);
if (belkiNokta != null) { print(belkiNokta.x); // geçerli}
int[]? belkiListe = null;string? belkiMetin = null;Fonksiyon dönüşlerinde nullable
Bölüm başlığı “Fonksiyon dönüşlerinde nullable”Sonuç üretemeyebilecek bir fonksiyon nullable tip döndürmelidir:
int? indeksBul(int[] dizi, int hedef) { for (int i = 0; i < dizi.length; i = i + 1) { if (dizi[i] == hedef) { return i; } } return null; // bulunamadı}Çağıran taraf sonucu kontrol eder:
int[] sayilar = [10, 20, 30];int? konum = indeksBul(sayilar, 20);
if (konum != null) { print(konum); // 1} else { print("bulunamadı");}Varsayılan değer
Bölüm başlığı “Varsayılan değer”Başlangıç değeri verilmeden tanımlanan nullable değişken null olur:
int? x; // x nullstring? s; // s nullT?, değerin null olabileceği anlamına gelir- Tip denetleyici, nullable bir değerin önce kontrol edilmeyen her kullanımını reddeder
if (x != null)tipi blok içinde null olmayacak biçimde daraltır- Çalışma zamanında hiçbir yük yoktur; tüm denetimler derleme zamanındadır
- Sonuç üretemeyebilecek fonksiyonlar
T?döndürür
