İ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.53975Baş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.0Burada, width ve height kısa yol ile atanırken, area bu değerler kullanılarak başlatıcı listesinde hesaplanır.
Görev
KolayNesneler 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 birBoxsınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:- Üç adet
final doublealan:length,widthveheight - İki adet hesaplanmış
final doublealan:volumevesurfaceArea length,widthveheightdeğerlerinithis.kısayolunu kullanarak alan vevolume(length × width × height) ilesurfaceArea(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
- Üç adet
main.dart: Kutu sınıfınızı içe aktarın ve iki kutu oluşturun:- Boyutları
3.0,4.0,5.0olan bir kutu - Boyutları
2.0,2.0,2.0olan bir kutu
display()metodunu çağırın.- Boyutları
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.0Kopya 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
}
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
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı