Varsayılan Yapıcı
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 10 / 110.
Bir sınıfta herhangi bir kurucu (constructor) tanımlamadığınızda, Dart otomatik olarak bir varsayılan kurucu sağlar. Bu, sadece sınıfın bir örneğini oluşturan, parametresiz bir kurucudur.
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dart varsayılan bir yapıcı sağlar: Book()
Book myBook = Book();
print(myBook.title); // UnknownVarsayılan yapıcı (default constructor) kodunuzda görünmezdir, ancak mevcuttur. Hiçbir argüman almaz ve nesneyi örnek değişkenlerine (instance variables) atadığınız varsayılan değerlerle başlatır.
Kendi yapıcı metodunuzu (constructor) tanımladığınızda, varsayılan yapıcı metot artık otomatik olarak sağlanmaz. Parametreli bir yapıcı metodun yanında hala argümansız bir yapıcı metot istiyorsanız, bunu açıkça oluşturmanız gerekir:
class Book {
String title;
int pages;
// Açık varsayılan yapıcı
Book() : title = 'Unknown', pages = 0;
// Parametreli yapıcı
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Varsayılanı kullanır
Book book2 = Book.withDetails('Dart', 300); // Parametreliyi kullanırAçık varsayılan yapıcı (explicit default constructor), başlangıç değerlerini atamak için bir başlatıcı listesi (iki noktadan sonraki kısım) kullanır. Bu desen, aynı sınıftan nesne oluşturmak için birden fazla yol sunmak istediğinizde kullanışlıdır.
Görev
KolayHem örtük hem de açık varsayılan yapıcıları (default constructors) gösteren basit bir ürün envanter sistemi oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
product.dart: Ürün oluşturmak için iki yol sunan birProductsınıfı tanımlayın:- Bir başlatıcı listesi (initializer list) kullanarak
namedeğişkenini'Unnamed'vepricedeğişkenini0.0olarak başlatan açık bir varsayılan yapıcıProduct() namevepriceparametrelerini kabul eden isimlendirilmiş bir yapıcıProduct.withDetails- Şunu yazdıran bir
display()metodu:Product: [name] - $[price]
- Bir başlatıcı listesi (initializer list) kullanarak
main.dart: Ürün sınıfınızı içe aktarın ve iki ürün oluşturun:- Biri varsayılan yapıcıyı kullanarak
- Diğeri
'Laptop've999.99değerleriyle isimlendirilmiş yapıcıyı kullanarak
display()metodunu çağırın.
Product sınıfınız iki örnek değişkene (instance variables) sahip olmalıdır:
String namedouble price
Beklenen çıktı formatı:
Product: Unnamed - $0.0
Product: Laptop - $999.99Kopya kağıdı
Bir sınıfta herhangi bir yapıcı (constructor) tanımlanmadığında, Dart otomatik olarak parametresiz bir varsayılan yapıcı (default constructor) sağlar:
class Book {
String title = 'Unknown';
int pages = 0;
}
Book myBook = Book(); // Uses implicit default constructor
print(myBook.title); // UnknownKendi yapıcınızı tanımladığınızda, varsayılan yapıcı artık otomatik olarak sağlanmaz. Hem argümansız bir yapıcıya hem de parametreli bir yapıcıya sahip olmak için bunları açıkça oluşturmanız gerekir:
class Book {
String title;
int pages;
// Explicit default constructor with initializer list
Book() : title = 'Unknown', pages = 0;
// Named constructor
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Uses default
Book book2 = Book.withDetails('Dart', 300); // Uses named constructorAçık varsayılan yapıcı (explicit default constructor), başlangıç değerlerini ayarlamak için (iki nokta üst üste işaretinden sonra) bir başlatıcı listesi (initializer list) kullanır.
Kendin dene
import 'product.dart';
void main() {
// YAPILACAK: Varsayılan yapıcıyı kullanarak bir ürün oluşturun
// YAPILACAK: 'Laptop' ve 999.99 ile isimlendirilmiş yapıcıyı kullanarak bir ürün oluşturun
// YAPILACAK: Her ürün üzerinde display() metodunu ç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ı