Null Güvenliğine Giriş
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 23 / 110.
Programlamadaki en yaygın hata kaynaklarından biri, mevcut olmayan bir değeri kullanmaya çalışmaktır. Dart'ta bu özel "değer yokluğu" null ile gösterilir. Dart'ın null güvenliği özelliği, kodunuz henüz çalışmadan önce bu hataları yakalamanıza yardımcı olur.
Null güvenliği olmadan, herhangi bir değişken potansiyel olarak null olabilir ve bu da onu kullanmaya çalıştığınızda çalışma zamanı çökmelerine yol açabilir:
// Eski Dart'ta (null safety olmadan)
String name; // Null olabilir!
print(name.length); // name null ise çökerNull güvenliği etkinken (Dart 2.12+), derleyici null değeri tutabilen değişkenler ile tutamayanlar arasındaki farkı ayırt eder. Varsayılan olarak, değişkenler non-nullable (null olamaz) şeklindedir - her zaman geçerli bir değer içermelidirler:
String name = 'Alice'; // Bir değeri olmalı
print(name.length); // Güvenli - name asla null değildirDerleyici, null olamayan (non-nullable) bir değişkenin null olabileceği durumlarda kodu derlemeyi reddedecektir. Bu, hata tespitini çalışma zamanından derleme zamanına kaydırarak programlarınızı daha güvenilir hale getirir. Gelecek derslerde, onlara gerçekten ihtiyaç duyduğunuzda null olabilir (nullable) türleri nasıl tanımlayacağınızı ve Dart'ın potansiyel olarak null değerlerle güvenli bir şekilde çalışmak için sunduğu operatörleri öğreneceksiniz.
Görev
KolayNull olamayan değişkenlerin önemini gösteren basit bir kişi kartı sistemi oluşturalım. Her kişinin geçerli ve kesin olarak mevcut bilgilere sahip olması gereken bir sistem oluşturacaksınız.
Kodunuzu iki dosyaya ayıracaksınız:
contact.dart: Bir kişinin iletişim bilgilerini temsil eden birContactsınıfı tanımlayın. Null safety ile çalıştığımız için her alanın geçerli bir değeri olmalıdır; eksik veriye izin verilmez! Sınıfınızda şunlar bulunmalıdır:- Kişinin adını tutan bir
String firstName - Kişinin soyadını tutan bir
String lastName - Kişinin e-posta adresini tutan bir
String email - Kişinin telefon numarasındaki basamak sayısını tutan bir
int phoneDigits - Dört değerin tamamını alan bir kurucu
- Ad ve soyadı aralarında bir boşluk olacak şekilde birleştirerek döndüren bir
fullNamegetter'ı - Kişinin bilgilerini yazdıran bir
displayCard()metodu
- Kişinin adını tutan bir
main.dart: Kişi sınıfınızı içe aktarın ve tüm alanların değerlerinin bulunduğunu göstermek için iki kişi oluşturun:- Adı
'Emma', soyadı'Wilson', e-postası'emma@mail.com've telefon basamak sayısı10olan bir kişi oluşturun - Adı
'James', soyadı'Brown', e-postası'james@work.com've telefon basamak sayısı11olan bir kişi oluşturun - Yukarıda listelenen sırayla her kişi üzerinde
displayCard()çağrısı yapın
- Adı
displayCard() metodu tam olarak şu biçimde yazdırmalıdır:
--- Contact Card ---
Name: [fullName]
Email: [email]
Phone digits: [phoneDigits]Her değişkenin gerçek bir değerle başlatılması gerektiğine dikkat edin; bu, null safety'nin iş başındaki hâlidir! Derleyici, fullName, email veya başka herhangi bir alana eriştiğinizde bunun her zaman geçerli veriler içermesini garanti eder.
Beklenen çıktı:
--- Contact Card ---
Name: Emma Wilson
Email: emma@mail.com
Phone digits: 10
--- Contact Card ---
Name: James Brown
Email: james@work.com
Phone digits: 11Kendin dene
import 'contact.dart';
void main() {
// TODO: İlk kişiyi şu bilgilerle oluşturun:
// - ad: 'Emma'
// - soyad: 'Wilson'
// - e-posta: 'emma@mail.com'
// - telefon basamakları: 10
// TODO: İkinci kişiyi şu bilgilerle oluşturun:
// - ad: 'James'
// - soyad: 'Brown'
// - e-posta: 'james@work.com'
// - telefon basamakları: 11
// TODO: Her kişi üzerinde sırasıyla displayCard() metodunu çağırın
}
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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi