Dart Null Safety nedir? Yakın tarihte, 2021’in ilk ayları, Dart programlama diline Null Safety özelliği ekleniyor ve bu özellik ile birlikte kod yazım biçimi majör değişiklik geçirecek. Bu değişikliğin yanında birçok veri tipinin bazı özellikleri ‘deprecated‘ hale gelecek. Flutter uygulamalarında yeni sürümlerde doğrudan kod parçacıklarını etkileyen bu değişikliğe yakından bakalım.

Null Safety nedir?

Null Safety, bir değişkenin oluşturulduğu andan itibaren null olamayacağını belirtir. Bu durumda bir değişkene bir değer atamanız veya nullable type olarak belirtmeniz gerekiyor. Peki bunu Dart programlama dilinde nasıl yapacağız?

// dogru kullanim
int sayi = 20;
print(sayi);

// yanlis kullanim
int sayi = null;
sayi = 30;
print(sayi);

// null olabilen degisken
int? sayi = null;
sayi = 10;
print(sayi);

Null olabilen değişkenlerin sonuna bir ‘?‘ işareti eklendiği durumda bu değişkenin null değer alabileceğini belirtiriz.

Değişkenlerin null olma durumuna göre if yapıları kurarak null değerler almasını engelleyebilirsiniz.

int value = nullOlabilenDegisken ?? 0;
// eger degisken null ise 0 degeri value'a atilir.
// degisken null degil ise degeri atanir.

Eğer bir değişkenin null olmadığını biliyorsanız ‘!‘ işaretiyle null olup olmama durumunu kontrol etmenize gerek kalmaz. Bu işaretle birlikte Dart derleyicisi, değişkenin null olamayan bir değişken olduğunu anlar. Eğer statik verilerle birlikte kullanmıyorsanız, kullanmanız tavsiye edilmez.

int? nullOlabilenNum = 2;
int value = nullOlabilenNum!;

Peki List, Map gibi objeleri nasıl nullable hale getireceğiz?

TipList Null mu?Item Null mu?Tanım
List<String>HayırHayırNull olmayan değerlere sahip
bir null olamayan liste
List<String>?EvetHayırNull olamayan değerlere sahip
bir null olabilen liste
List<String?>HayırEvetNull olabilen değerlere sahip
bir null olamayan liste
List<String?>?EvetEvetNull olabilen değerlere sahip
bir null olabilen liste
List tipinin null safety durumları

Yukarıdaki tablonun benzerini Map objesi için de yazabiliriz.

TipMap Null mu?Item Null mu?
Map<String, int>HayırHayır
Map<String, int>?EvetHayır
Map<String, int?>HayırEvet
Map<String, int?>?EvetEvet
Map tipinin null safety durumları

Late

Oluşturulduğu anda değil de daha sonrasında anlamlandırılacak değişkenlerin tipi yeni Dart güncellemesiyle birlikte Late olarak belirtilecek. Bu değişkenleri neden nullable tiple belirtmiyoruz diye sorabilirsiniz çünkü bu değişkenlerin bir değeri olmak durumunda fakat oluşturulduğu anda değil. Ayrıca bu değişkenlerin değeri null da olamaz. Late yerine ? işaretiyle birlikte nullable bir değişken oluşturmanın zararı yok ama mantıksal olarak kafa karıştırıcı bir durum olduğunu da belirtelim. 🙂

class aNumber{
late int aNumber;

numberCalculate(){
  aNumber = calculation();
}

}

Yukarıdaki örnekte aNumber sınıfı derlendiğinde Dart, bu sınıfın değişkeninin null olmayacağını ve sonrasında bu sınıf çağırıldığında aNumber değişkenine bir değer atanacağını anlamış olur.



Yazının sonuna geldik. Dart programlama dili yakın zamanda tıpkı Swift gibi Null Safety‘e sahip olacak ve bu değişikliğin üzerinden bir özet şeklinde geçmiş olduk. Daha fazla teknik bilgi ve ayrıntılar için blogumu takipte kalın. 🙂


Okuyucuya Not

Merhaba okuyucu! Blogum son zamanlarda yüksek trafik almaya başladı ve bu durumdan memnunum fakat aynı zamanda siz ziyaretçileri tatmin edememekten endişeliyim. 🙂 Eğer yazılarım ile ilgili bir tavsiyeniz olursa mail adresimden bana ulaşabilir veya Twitter üzerinden direct message gönderebilirsiniz. Github’ta örnek olarak yaptığım projelere göz atmak isterseniz de bu linki kullanabilirsiniz. Umarım bu ziyaretinizle size bir şeyler katabilmişimdir.

Sağlıcakla kalın!

Tags: