CodeBlanks Logo Icon CodeBlanks

Initializer list

Initializer list ile alan başlatmayı öğrenirsin.

Initializer list

Initializer list (başlatma listesi), yapıcı gövdesinden önce alanlara değer atamanın yoludur. İki nokta üst üste ile başlar ve virgülle ayrılmış atamalar içerir: : width = size, height = size.

Örnek: Rectangle.square(double size) : width = size, height = size;. Burada width ve height alanları gövde çalışmadan önce ayarlanır. final alanlar gövde içinde değiştirilemediği için initializer list, onları atamanın temiz yoludur. List, gövdeden önce çalışır; bu nedenle hesaplamaları burada yapmak daha güvenlidir.

final alanlar ve initializer list

final ile işaretlenen alanlar yalnızca bir kez atanabilir; bu atama yapıcı tamamlanmadan önce yapılmak zorundadır. Initializer list, bu koşulu karşılayan en temiz yoludur.

Örnek: class Rectangle { final double width; final double height; Rectangle(this.width, this.height); Rectangle.square(double size) : width = size, height = size; }. square named constructor'ı her iki final alana da initializer list içinde değer verir. Gövde boş olsa bile noktalı virgülle biter. Bu yapı, alanların yapı taşı (immutable) nesneler üretmesini sağlar.

Uygulama Rectangle.square yapıcısını yaz

Rectangle adında bir sınıf tanımla. final double width ve final double height alanlarını ekle. Default constructor Rectangle(this.width, this.height) yaz. Rectangle.square(double size) : width = size, height = size; named constructor'ını ekle. main içinde var r = Rectangle.square(5); ile örnek oluştur ve print(r.width) çağrısı yap.

Başlangıç kodu

main.dart
// Rectangle sınıfını tanımla
// final width ve height ekle
// Default constructor ve Rectangle.square ekle

void main() {
  // Rectangle.square(5) örneğini oluştur ve r.width yazdır
}

Örnek çözüm

main.dart
// Rectangle sınıfını tanımla
class Rectangle {
  final double width;
  final double height;
  Rectangle(this.width, this.height);
  Rectangle.square(double size) : width = size, height = size;
}

void main() {
  var r = Rectangle.square(5);
  print(r.width);
}

Beklenen çıktı

5.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Initializer list parçalarını eşle

Kavram Anlamı
: Liste başlangıcı
width = size Atama
final Değişmez alan anahtarı

2 İki noktayı ekle

Soru
class Rectangle {
  final double width;
  final double height;
  Rectangle.square(double size)____ width = size, height = size;
}
Cevap
class Rectangle {
  final double width;
  final double height;
  Rectangle.square(double size): width = size, height = size;
}

Açıklama: İki nokta, initializer list'i yapıcı gövdesinden ayırır.

3 Hangisi geçerli bir initializer list söz dizimidir?

  • Rectangle.square(double size) { width = size; height = size; }
  • Rectangle.square(double size) => width = size, height = size;
  • Rectangle.square(double size) : width = size, height = size; Doğru cevap
  • Rectangle.square(double size) where width = size, height = size;

Açıklama: İkinokta, initializer list'i gövdeden ayırır; virgül atamaları bölümler.

Orta seviye bölümündeki tüm dersler