Menu
Coddy logo textTech

İlklendirme Listeleri

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

Bir ilklendirme listesi (initializer list), bir yapıcıda (constructor) iki nokta üst üste işaretinden sonra, yapıcı gövdesinden önce gelen koddur. Yapıcı gövdesi çalışmadan önce yürütülür ve örnek değişkenlerini ilklendirmek için kullanılır.

Önceki derslerde başlatıcı listelerini (initializer lists) zaten görmüştünüz:

Point.origin() : x = 0, y = 0;

İki noktadan sonraki kısım (x = 0, y = 0) başlatıcı listesidir (initializer list). Birden fazla başlatma işlemi virgülle ayrılır.

Başlatıcı listeleri, yapıcı (constructor) gövdesi çalışmadan önce atanması gereken final değişkenlerle çalışırken gereklidir:

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area);   // 78.53975

Başlatıcı listesi (initializer list), yapıcı parametrelerini atamadan önce onlar üzerinde hesaplamalar veya dönüşümler de gerçekleştirebilir. Bu, nesne oluşturma sırasında değerler türetmeniz veya verileri doğrulamanız gerektiğinde yararlıdır.

Kısaltılmış this. sözdizimini bir başlatıcı listesi (initializer list) ile birleştirebilirsiniz:

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0

Burada, width ve height kısa yol ile atanırken, area bu değerler kullanılarak başlatıcı listesinde hesaplanır.

challenge icon

Görev

Kolay

Nesneler oluşturulduğunda türetilmiş değerleri hesaplamak için başlatıcı listelerini (initializer lists) kullanan bir kutu boyutu hesaplayıcı oluşturalım.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • box.dart: Boyutları ve otomatik olarak hesaplanan özellikleri olan bir 3D kutuyu temsil eden bir Box sınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:
    • Üç adet final double alan: length, width ve height
    • İki adet hesaplanmış final double alan: volume ve surfaceArea
    • length, width ve height değerlerini this. kısayolunu kullanarak alan ve volume (length × width × height) ile surfaceArea (2 × (length×width + width×height + height×length)) değerlerini hesaplamak için bir başlatıcı listesi kullanan bir yapıcı (constructor)
    • Kutu bilgilerini yazdıran bir display() metodu
  • main.dart: Kutu sınıfınızı içe aktarın ve iki kutu oluşturun:
    • Boyutları 3.0, 4.0, 5.0 olan bir kutu
    • Boyutları 2.0, 2.0, 2.0 olan bir kutu
    Listelenen sırayla her kutu üzerinde display() metodunu çağırın.

display() metodu tam olarak şu formatta yazdırmalıdır:

Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]

Beklenen çıktı:

Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0

Kopya kağıdı

Bir başlatıcı listesi (initializer list), bir kurucuda iki nokta üst üste işaretinden sonra, kurucu gövdesinden önce gelen koddur. Kurucu gövdesi çalışmadan önce çalışır ve örnek değişkenlerini başlatmak için kullanılır.

Virgülle ayrılmış birden fazla başlatma içeren temel sözdizimi:

Point.origin() : x = 0, y = 0;

Başlatıcı listeleri, kurucu gövdesi çalışmadan önce atanması gereken final değişkenler için gereklidir:

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

Bazı alanları doğrudan atamak ve diğerlerini hesaplamak için kısa yol olan this. sözdizimini bir başlatıcı listesiyle birleştirebilirsiniz:

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

Başlatıcı listesi, kurucu parametrelerini atamadan önce üzerlerinde hesaplamalar veya dönüşümler gerçekleştirebilir; bu, nesne oluşturma sırasında değerler türetmek için kullanışlıdır.

Kendin dene

import 'box.dart';

void main() {
  // YAPILACAK: 3.0, 4.0, 5.0 boyutlarında bir kutu oluşturun
  
  // YAPILACAK: 2.0, 2.0, 2.0 boyutlarında bir kutu oluşturun
  
  // YAPILACAK: Her kutu üzerinde sırasıyla display() fonksiyonunu ç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