Menu
Coddy logo textTech

? ve ! Operatörleri

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

Nullable türlerle çalışırken Dart, değerlere güvenli bir şekilde erişmek için iki temel operatör sunar. null-aware access operator ?. ve null assertion operator !, potansiyel olarak null olan değerleri nasıl ele alacağınızı kontrol etmenizi sağlar.

?. operatörü, null olabilen bir değer üzerindeki özelliklere veya yöntemlere güvenli bir şekilde erişir. Eğer değer null ise, tüm ifade kilitlenmek yerine null döndürür:

String? name = 'Alice';
print(name?.length);  // 5

name = null;
print(name?.length);  // null (çökme olmaz!)

! operatörü Dart'a "Bu değerin null olmadığından eminim." der. Nullable bir türü non-nullable bir türe dönüştürür, ancak değer gerçekten null ise bir hata fırlatır:

String? maybeName = 'Bob';
String definite = maybeName!;  // Tamam - null olmadığını iddia ediyoruz
print(definite.length);  // 3

String? empty = null;
// String crash = empty!;  // Çalışma zamanı hatası! Değer null idi

Null değerleri sorunsuz bir şekilde işlemek istediğinizde ?. kullanın. ! operatörünü yalnızca bir değerin var olduğundan kesinlikle emin olduğunuzda kullanın - belki bir if ifadesiyle kontrol ettikten sonra veya mantığın bir değeri garanti ettiğini bildiğinizde. ! operatörünün aşırı kullanımı null güvenliğinin amacını boşa çıkarır ve çalışma zamanı çökmelerine neden olabilir.

challenge icon

Görev

Kolay

?. ve ! operatörlerini kullanarak null olabilir değerlerle güvenli bir şekilde nasıl çalışılacağını gösteren bir ürün envanter sistemi oluşturalım.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • product.dart: Envanterdeki bir öğeyi temsil eden bir Product sınıfı tanımlayın. Bazı ürünler eksiksiz bilgilere sahipken diğerlerinin kataloglama işlemi hâlâ devam etmektedir. Sınıfınız şunlara sahip olmalıdır:
    • Null olamayan bir String name - her ürünün bir adı olmalıdır
    • Null olamayan bir double price - her ürünün bir fiyatı olmalıdır
    • Null olabilen bir String? description - bazı ürünlerin henüz açıklaması yoktur
    • Null olabilen bir String? category - bazı ürünler henüz kategorilere ayrılmamıştır
    • name ve price değerlerini gerekli parametreler olarak alan bir oluşturucu
    • getDescriptionLength() kullanarak açıklamanın uzunluğunu döndüren veya açıklama yoksa ?. döndüren bir null metodu
    • getCategoryUppercase() kullanarak kategoriyi büyük harfle döndüren bir ! metodu - bu metot kategorinin ayarlanmış olduğunu varsayar
    • Ürün bilgilerini yazdıran, açıklama null olduğunda displayProduct() ve kategori null olduğunda No description gösteren bir Uncategorized metodu
  • main.dart: Ürün sınıfınızı içe aktarın ve her iki operatörü de gösterin:
    • Fiyatı 'Laptop' olan 999.99 adlı bir ürün oluşturun, ardından açıklamasını 'High-performance computing device' ve kategorisini 'Electronics' olarak ayarlayın
    • Fiyatı 'Mystery Item' olan 49.99 adlı bir ürün oluşturun (açıklamayı ve kategoriyi null olarak bırakın)
    • Laptop için: displayProduct() metodunu çağırın, Description length: [length] kullanarak getDescriptionLength() yazdırın ve Category: [uppercase] kullanarak getCategoryUppercase() yazdırın
    • Mystery Item için: displayProduct() metodunu çağırın ve Description length: [length] kullanarak getDescriptionLength() yazdırın (bu işlem null gösterecektir)

displayProduct() metodu şu biçimde yazdırmalıdır:

Product: [name] - $[price]
Description: [description or "No description"]
Category: [category or "Uncategorized"]

Beklenen çıktı:

Product: Laptop - $999.99
Description: High-performance computing device
Category: Electronics
Description length: 32
Category: ELECTRONICS
Product: Mystery Item - $49.99
Description: No description
Category: Uncategorized
Description length: null

Kendin dene

import 'product.dart';

void main() {
  // TODO: 999.99 fiyatıyla 'Laptop' adında bir ürün oluşturun
  // Ardından açıklamasını 'High-performance computing device' olarak ayarlayın
  // Ve kategorisini 'Electronics' olarak ayarlayın
  
  // TODO: 49.99 fiyatıyla 'Mystery Item' adında bir ürün oluşturun
  // Açıklama ve kategoriyi null olarak bırakın
  
  // TODO: Laptop için:
  // - displayProduct() fonksiyonunu çağırın
  // - getDescriptionLength() kullanarak "Description length: [length]" yazdırın
  // - getCategoryUppercase() kullanarak "Category: [uppercase]" yazdırın
  
  // TODO: Mystery Item için:
  // - displayProduct() fonksiyonunu çağırın
  // - getDescriptionLength() kullanarak "Description length: [length]" 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

Kendi başına pratik yap: Online Dart derleyicisi