Menu
Coddy logo textTech

Null-Aware Operatörleri

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 27 / 110.

?. ve ! operatörlerinin ötesinde Dart, null olabilir (nullable) değerlerle çalışmayı daha kısa ve özlü hale getiren ek operatörler sağlar. Bu null-aware operatörler, potansiyel null değerlerle uğraşırken daha temiz kod yazmanıza yardımcı olur.

null birleştirme operatörü ??, sol taraftaki değer null değilse onu, aksi takdirde sağ taraftaki değeri döndürür:

String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName);  // Guest

nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName);  // Alex

Null-aware atama operatörü ??=, bir değeri yalnızca değişken şu anda null ise atar:

String? username;
username ??= 'Anonymous';
print(username);  // Anonymous

username ??= 'NewName';
print(username);  // Hala Anonymous (null değildi)

İç içe geçmiş özellikler için null-aware (null-farkındalıklı) erişim operatörünü ?. zincirleme olarak kullanabilirsiniz:

String? city = user?.address?.city;  // user veya address null olsa bile güvenlidir

Bu operatörler birbiriyle iyi uyum sağlar. Örneğin, null olabilir bir özelliğe erişebilir ve varsayılan bir değer sağlayabilirsiniz:

String greeting = user?.name ?? 'Stranger';
// Eğer user null ise VEYA user.name null ise, 'Stranger' kullan

Bu operatörleri kullanmak, programınız boyunca null güvenliğini korurken kodunuzun okunabilir kalmasını sağlar.

challenge icon

Görev

Kolay

İsteğe bağlı bilgileri işlerken null-aware operatörlerinin kodunuzu nasıl daha temiz hale getirebileceğini gösteren bir misafir kayıt sistemi oluşturalım.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • guest.dart: Bir etkinliğe katılan birini temsil eden bir Guest sınıfı tanımlayın. Bazı misafirler tüm detayları sağlarken, diğerleri sadece temel bilgileri verir. Sınıfınız şunlara sahip olmalıdır:
    • Null olamayan bir String name - her misafirin bir ismi olmalıdır
    • Null olabilir bir String? email - herkes e-posta adresi vermeyebilir
    • Null olabilir bir String? dietaryPreference - bazı misafirler diyet ihtiyaçlarını belirtmez
    • name parametresini zorunlu olarak alan bir yapıcı (constructor)
    • E-posta varsa onu, yoksa ?? operatörünü kullanarak 'No email provided' değerini döndüren bir getDisplayEmail() metodu
    • ??= operatörünü kullanarak, dietaryPreference değerini yalnızca şu an null ise 'Standard' olarak ayarlayan bir assignDefaultDiet() metodu
    • ?. kullanarak e-postanın uzunluğunu döndüren veya e-posta yoksa null döndüren bir getEmailDomain() metodu
    • Misafirin yaka kartı bilgilerini yazdıran bir printBadge() metodu
  • main.dart: Misafir sınıfınızı içe aktarın ve farklı bilgi düzeylerine sahip üç misafir kaydedin:
    • 'Alice' adında bir misafir oluşturun, e-postasını 'alice@company.com' ve diyet tercihini 'Vegetarian' olarak ayarlayın
    • 'Bob' adında bir misafir oluşturun, sadece e-postasını 'bob@email.org' olarak ayarlayın (diyet tercihini null bırakın)
    • 'Charlie' adında bir misafir oluşturun (hem e-postayı hem de diyet tercihini null bırakın)
    • Her üç misafir için de assignDefaultDiet() metodunu çağırın
    • Sırasıyla her misafir için printBadge() metodunu çağırın, ardından getEmailDomain() kullanarak Email length: [result] yazdırın

printBadge() metodu şu formatta yazdırmalıdır:

=== Guest Badge ===
Name: [name]
Email: [getDisplayEmail()]
Diet: [dietaryPreference or "Not specified"]

Alice'in diyet tercihinin nasıl 'Vegetarian' olarak kaldığına dikkat edin; çünkü ??= operatörü yalnızca değer null olduğunda atama yapar, oysa Bob ve Charlie'ye varsayılan 'Standard' diyeti atanır.

Beklenen çıktı:

=== Guest Badge ===
Name: Alice
Email: alice@company.com
Diet: Vegetarian
Email length: 17
=== Guest Badge ===
Name: Bob
Email: bob@email.org
Diet: Standard
Email length: 13
=== Guest Badge ===
Name: Charlie
Email: No email provided
Diet: Standard
Email length: null

Kopya kağıdı

Dart, null olabilen (nullable) değerlerle daha kısa ve öz bir şekilde çalışmak için null-aware operatörler sunar.

Null-coalescing operatörü ??, sol taraftaki değer null değilse onu, null ise sağ taraftaki değeri döndürür:

String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName);  // Guest

nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName);  // Alex

Null-aware atama operatörü ??=, bir değeri yalnızca değişken şu an null ise atar:

String? username;
username ??= 'Anonymous';
print(username);  // Anonymous

username ??= 'NewName';
print(username);  // Still Anonymous (wasn't null)

İç içe geçmiş özellikler için null-aware erişim operatörünü ?. zincirleme olarak kullanabilirsiniz:

String? city = user?.address?.city;  // Safe even if user or address is null

Bu operatörler birlikte kombine edilebilir:

String greeting = user?.name ?? 'Stranger';
// If user is null OR user.name is null, use 'Stranger'

Kendin dene

import 'guest.dart';

void main() {
  // TODO: 'Alice' adında bir konuk oluşturun
  // E-postasını 'alice@company.com' olarak ayarlayın
  // Diyet tercihini 'Vegetarian' olarak ayarlayın

  // TODO: 'Bob' adında bir konuk oluşturun
  // Sadece e-postasını 'bob@email.org' olarak ayarlayın
  // Diyet tercihini null olarak bırakın

  // TODO: 'Charlie' adında bir konuk oluşturun
  // Hem e-postayı hem de diyet tercihini null olarak bırakın

  // TODO: Üç konuğun tamamında assignDefaultDiet() fonksiyonunu çağırın

  // TODO: Sırasıyla her konuk için (Alice, Bob, Charlie):
  // - printBadge() fonksiyonunu çağırın
  // - getEmailDomain() kullanarak 'Email length: [result]' yazdırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler