Dart dilinde null-aware operatörler, bir değerin null olup olmadığını kontrol etmek ve buna bağlı olarak hesaplamalar yapmak için kullanılır. Bu başlık altında, Dart’taki null-aware operatörlerin temelini öğrenerek, kodunuzu daha güvenli ve etkili hale getirmenin yollarını keşfedin.
??
Dart’ın null-aware operatörlerinden biri olan ??
, bir değerin null olup olmadığını kontrol etmek ve null durumunda alternatif bir değer kullanmak için kullanılır. Bu başlık altında, ??
operatörünü kullanarak kodunuzu daha kısa ve okunabilir hale getirmenin pratik örneklerini inceleyin.
Örnek: Null Kontrolü
1 2 3 4 5 6 | String? adi; // Bu değişken null olabilir. String tamAdi = adi ?? 'Bilgi bulunamadı'; print(tamAdi); // Eğer adi null ise, 'Bilgi bulunamadı' yazdırılır. |
Bu örnekte, ??
operatörü kullanılarak adi
değişkeni kontrol edilir. Eğer adi
null ise, tamAdi
değişkenine ‘Bilgi bulunamadı’ değeri atanır.
Örnek: Sayı Toplama
1 2 3 4 5 6 7 8 | int? sayi1 = 5; int? sayi2; int toplam = (sayi1 ?? 0) + (sayi2 ?? 0); print('Toplam: $toplam'); // Eğer sayi1 veya sayi2 null ise, onları 0 olarak kabul eder. |
??=
??=
(null-aware assignment) operatörü, bir değişkenin değerini sadece eğer değişken null ise sağlanan bir değerle atanmasını sağlar. Eğer değişken null değilse, atama işlemi gerçekleşmez ve mevcut değer korunur.
İşte ??=
operatörünü kullanarak yapılmış bir örnek:
1 2 3 4 5 6 7 8 | String? adi; // Bu değişken null olabilir. String yeniAdi = 'Yeni Bir İsim'; adi ??= yeniAdi; print('Adı: $adi'); |
Bu örnekte, adi
değişkeni ??=
operatörü ile kontrol edilir. Eğer adi
null ise, yeniAdi
değeri atanır. Eğer adi
null değilse, atama işlemi yapılmaz ve mevcut değer korunur. Bu sayede adi
değişkeni null ise yeniAdi
ile, null değilse mevcut değeriyle kullanılır.
?.
?.
(null-aware) operatörü, Dart dilinde bir nesnenin null olup olmadığını kontrol ederek, eğer nesne null değilse bir metodunu çağırmak veya bir özelliğine erişmek istediğinizde kullanılır. Nesne null ise, tüm ifade null olarak değerlendirilir.
İşte ?.
operatörünün kullanımını açıklamak için bir örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Person { String name; Person(this.name); void introduce() { print('Merhaba, benim adım $name'); } } void main() { Person? person = null; // Bu nesne null. // Null-aware operatör kullanılmadan // Eğer person null ise, introduce() metodunu çağırmak çalışma zamanında bir hataya neden olurdu. if (person != null) { person.introduce(); // Bu satır, person null ise çalıştırılmaz. } else { print('Person null'); } // Null-aware operatör kullanılarak // Eğer person null ise, tüm ifade null olarak değerlendirilir. person?.introduce(); // Çalışma zamanı hatası olmadan, 'Person null' yazdırılır. } |
Yukarıdaki örnekte, ?.
kullanmak, person
nesnesinin introduce
metodunu çağırmadan önce açıkça null kontrolü yapma ihtiyacını ortadan kaldırır. Eğer person
null ise, person?.introduce()
ifadesi zarif bir şekilde null olarak değerlendirilir ve çalışma zamanında bir hataya neden olmaz.
Bu operatör, potansiyel olarak null olabilen nesneler üzerinde birden fazla metod çağrısı veya özellik erişimi zinciri oluşturulurken özellikle kullanışlıdır.
?…
Dart 2.3, bir spread operatörü (…) getirir ve beraberinde yeni bir null aware operatörü olan ?… gelir!
… ifadesini bir koleksiyon literali içinde bir ifadenin önüne yerleştirmek, ifadenin sonucunu açar ve bu ifadenin elemanlarını doğrudan yeni koleksiyonun içine ekler.
Bu nedenle şimdi, aşağıdaki iki örnek eşdeğerdir.
1 2 3 | List numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; |
ve
1 2 3 4 5 | List lowerNumbers = [1, 2, 3, 4, 5]; List upperNumbers = [6, 7, 8, 9, 10]; List numbers = [...lowerNumbers...upperNumbers]; |
Yeni null aware operatöründen faydalanmak için, onu şu şekilde kullanabilirsiniz:
1 2 3 4 5 | List lowerNumbers = [1, 2, 3, 4, 5]; List upperNumbers = [6, 7, 8, 9, 10]; List numbers = [...lowerNumbers?...upperNumbers]; |
Bu, aşağıdaki kodun eşdeğidir:
1 2 3 4 5 6 7 | List numbers = []; numbers.addAll(lowerNumbers); if (upperNumbers != null) { numbers.addAll(upperNumbers); } |
Bu operatörler, özellikle null değer kontrolü yaparken kodunuzu daha etkili hale getirir ve kolay anlaşılabilir koleksiyon işlemleri sağlar. Dart’ın güncel özellikleri, kod yazma sürecinizi daha verimli ve rahat hale getirmeye devam ediyor.
Yorum Yap