Menu
Coddy logo textTech

Null Safety'ye 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, var olmayan bir değeri kullanmaya çalışmaktır. Dart'ta bu özel "değer yokluğu" null ile temsil edilir. Dart'ın null safety özelliği, bu hataları kodunuz henüz çalışmadan yakalamanıza yardımcı olur.

Null güvenliği (null safety) olmadan, herhangi bir değişken potansiyel olarak null olabilir ve bu da onu kullanmaya çalıştığınızda çalışma zamanı (runtime) hatalarına yol açabilir:

// Eski Dart'ta (null güvenliği olmadan)
String name;  // Null olabilir!
print(name.length);  // name null ise çöker

Null 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ğildir

Derleyici, 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.

challenge icon

Görev

Kolay

Boş olamaz (non-nullable) değişkenlerin önemini gösteren basit bir kişi kartı sistemi oluşturalım. Her kişinin geçerli ve garantili bilgilere sahip olması gereken bir sistem kuracaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • contact.dart: Bir kişinin iletişim bilgilerini temsil eden bir Contact sınıfı tanımlayın. Null safety (null güvenliği) 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ız şunlara sahip olmalıdır:
    • Kişinin adı için bir String firstName
    • Kişinin soyadı için bir String lastName
    • Kişinin e-posta adresi için bir String email
    • Telefon numarasındaki basamak sayısı için bir int phoneDigits
    • Dört değerin tümünü alan bir yapıcı (constructor)
    • Ad ve soyadı aralarında bir boşlukla birleştirerek döndüren bir getter fullName
    • Kişinin bilgilerini yazdıran bir displayCard() metodu
  • main.dart: Kişi sınıfınızı içe aktarın ve tüm alanların değerlere sahip olduğunun garanti edildiğini göstermek için iki kişi oluşturun:
    • Adı 'Emma', soyadı 'Wilson', e-postası 'emma@mail.com' ve telefon basamak sayısı 10 olan bir kişi oluşturun
    • Adı 'James', soyadı 'Brown', e-postası 'james@work.com' ve telefon basamak sayısı 11 olan bir kişi oluşturun
    • Yukarıda listelenen sırayla her kişi üzerinde displayCard() metodunu çağırın

displayCard() metodu tam olarak şu formatta 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 halidir! Derleyici, fullName, email veya başka bir alana eriştiğinizde, bunların her zaman geçerli veriler içereceğini 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: 11

Kopya kağıdı

Dart, var olmayan değerlerin kullanılmasından kaynaklanan hataları önlemek için null safety kullanır. Özel null değeri, bir değerin yokluğunu temsil eder.

Null safety etkinken (Dart 2.12+), değişkenler varsayılan olarak non-nullable durumdadır - her zaman geçerli bir değer içermeleri gerekir:

String name = 'Alice';  // Bir değeri olmalı
print(name.length);     // Güvenli - name asla null değildir

Derleyici, non-nullable bir değişkenin null olma ihtimali varsa kodun derlenmesini engeller ve hata tespitini çalışma zamanından derleme zamanına kaydırır.

Kendin 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
}
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