Menu
Coddy logo textTech

Late Değişkenler

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

late anahtar kelimesi Dart'a, null olamaz (non-nullable) bir değişkenin hemen atanmamış olsa bile kullanılmadan önce başlatılacağını söyler. Bu, bir alanı bildirimde veya yapıcıda (constructor) başlatamadığınızda, ancak erişilmeden önce bir değere sahip olacağından emin olduğunuzda yararlıdır.

class User {
  late String username;
  
  void initialize(String name) {
    username = name;
  }
  
  void greet() {
    print('Hello, $username!');
  }
}

User user = User();
user.initialize('Alice');
user.greet();  // Hello, Alice!

late olmadan, Dart username değişkeninin başlatılmadığından şikayet ederdi. late belirleyicisi, onu okumadan önce bir değer atayacağınızın sözünü verir.

late ifadesinin bir diğer avantajı tembel başlatmadır. Başlatıcıya sahip bir late değişkeni, değerini kendisine ilk kez erişilene kadar hesaplamaz:

class Config {
  late String settings = loadSettings();
  
  String loadSettings() {
    print('Loading...');
    return 'default';
  }
}

Config config = Config();
print('Config created');
print(config.settings);  // "Loading..." burada yazdırılır, ardından "default"

loadSettings() yöntemi yalnızca settings'e ilk kez erişildiğinde çalışır, nesne oluşturulduğunda değil. Yine de dikkatli olun; bir late değişkenine başlatılmadan önce erişmek bir çalışma zamanı hatası fırlatır.

challenge icon

Görev

Kolay

late değişkenlerini kullanarak hem ertelenmiş başlatmayı hem de tembel başlatmayı gösteren bir veritabanı bağlantı yöneticisi oluşturalım.

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

  • database.dart: Bir veritabanı bağlantısını simüle eden bir Database sınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:
    • Nesne oluşturulduktan sonra ayarlanacak bir late String connectionString
    • late String status yazdıran ve Checking connection... döndüren tembel başlatıcılı bir 'Connected'
    • connect(String connStr) değerini ayarlayan ve connectionString yazdıran bir Connection configured: [connectionString] yöntemi
    • query(String sql) yazdıran bir Executing on [connectionString]: [sql] yöntemi
    • checkStatus() yazdıran bir Status: [status] yöntemi (bu, ilk çağrıda tembel başlatmayı tetikler)
  • main.dart: Veritabanı sınıfınızı içe aktarın ve late kullanımının her iki şeklini gösterin:
    • Bir Database örneği oluşturun
    • Database object created yazdırın
    • Bağlantı dizesi olarak connect() kullanarak 'localhost:5432/mydb' çağrısı yapın
    • query() ile 'SELECT * FROM users' çağrısı yapın
    • Tembel başlatmayı tetiklemek için checkStatus() çağrısı yapın

connectionString değerinin nesne oluşturulduktan sonra manuel olarak ayarlandığına, status değerinin ise yalnızca ilk kez erişildiğinde hesaplandığına dikkat edin.

Beklenen çıktı:

Database object created
Connection configured: localhost:5432/mydb
Executing on localhost:5432/mydb: SELECT * FROM users
Checking connection...
Status: Connected

Kendin dene

import 'database.dart';

void main() {
  // TODO: Bir Database örneği oluşturun
  
  // TODO: 'Database object created' yazdırın
  
  // TODO: 'localhost:5432/mydb' ile connect() metodunu çağırın
  
  // TODO: 'SELECT * FROM users' ile query() metodunu çağırın
  
  // TODO: Tembel başlatmayı (lazy initialization) tetiklemek için checkStatus() 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

Kendi başına pratik yap: Online Dart derleyicisi