Yapıcılar (Constructors)
Bir constructor'ı, sınıfının adını (isteğe bağlı olarak Named constructor bölümünde açıklandığı gibi, ek bir tanımlayıcı) kullanarak bir fonksiyon oluşturarak tanımlayın.
Yeni bir sınıf örneği oluşturmak için en yaygın constructor olan "generative constructor"ı kullanın ve gerekirse herhangi bir örnek değişkenini başlatmak için initializing formal parameters'ları kullanın:
this
kelimesi mevcut örneğe referans yapar.
Not
this
'i, bir isim çakışması olduğunda kullanın. Aksi takdirde, Dart stilithis
'i atlar.
Formal Parametreleri Başlatma (Initializing Formal Parameters)
Dart, bir constructor argümanını bir örnek değişkenine atamak için yaygın bir deseni basitleştirmek için initializing formal parameters'ları kullanır. Constructor tanımında doğrudan this.ozellikAdi
'ni kullanın ve gövdeyi atlayın.
Initializing parametreleri, non-nullable veya final örnek değişkenlerini başlatmanıza olanak tanır, çünkü her ikisi de başlatılmalı veya varsayılan bir değer verilmelidir:
Başlatma formaliteleri tarafından tanıtılan değişkenler, içsel olarak finaldir ve yalnızca başlatıcı listesinin kapsamında geçerlidir.
Başlatıcı listesinde ifade edilemeyen bazı mantık gerçekleştirmeniz gerekiyorsa, o mantığı içeren bir fabrika kurucusu (veya statik metod) oluşturun ve ardından hesaplanan değerleri normal bir kurucuya geçirin.
Varsayılan Yapıcılar (Default Constructors)
Eğer bir constructor tanımlamazsanız, size bir varsayılan constructor sağlanır. Varsayılan constructor'ın argümanı yoktur ve üst sınıftaki argümansız constructor'ı çağırır.
Yapıcılar Miras Edilmez (Constructors Aren't Inherited)
Alt sınıflar, üst sınıflarından constructorları miras almazlar. Constructor tanımlamayan bir alt sınıf, yalnızca varsayılan (argüman olmayan, isimsiz) constructor'a sahiptir.
İsimlendirilmiş Yapıcılar (Named Constructors)
Bir sınıf için birden çok constructor uygulamak veya ek açıklama sağlamak için isimlendirilmiş constructor'ları kullanın:
Constructor'lar miras alınmadığı için, bir üst sınıftaki isimlendirilmiş constructor'ı bir alt sınıfta kullanmak istiyorsanız, o constructor'ı alt sınıfta implemente etmelisiniz.
Argümansız Üst Sınıf Constructor'ını Çağırmak
Varsayılan olarak, bir alt sınıftaki bir constructor, üst sınıfın isimsiz, argümansız constructor'ını çağırır. Üst sınıfın constructor'ı, constructor gövdesinin başında çağrılır. Eğer bir initializer list de kullanılıyorsa, bu, üst sınıf çağrılmadan önce gerçekleştirilir. Özetle, yürütme sırası şu şekildedir:
initializer list
üst sınıfın argümansız constructor'u
ana sınıfın argümansız constructor'u
Eğer üst sınıfın isimsiz, argümansız constructor'u yoksa, o zaman üst sınıfın bir constructor'ını manuel olarak çağırmanız gerekir. Bu, iki nokta üst üste (:
) ve ardından constructor gövdesi (varsa) ile belirtilir.
Aşağıdaki örnekte, Calisan
sınıfının constructor'ı, üst sınıfı olan Kisi
sınıfının isimli constructor'ını çağırır:
Uyarı
Üst sınıf constructor'ına argümanlar,
this
'e erişim sağlamaz. Örneğin, argümanlar static metodları çağırabilir, ancak örnek metodları çağıramaz.
Super Parametreleri (Super Prameters)
Her bir parametreyi tek tek üst sınıf constructor'ına geçirmekten kaçınmak için, belirli veya varsayılan üst sınıf constructor'ına parametreleri iletmeniz için super-initializer parametrelerini kullanabilirsiniz. Bu özellik, initializing formal parameters ile benzer sözdizimi ve anlamı taşır:
Super-initializer parametreleri, super-constructor çağrısında zaten pozisyonel argümanlar varsa pozisyonel olamaz, ancak her zaman isimli olabilir:
Initializer List
Super sınıf constructor'ını çağırmak dışında, constructor gövdesi çalışmadan önce örnek değişkenlerini başlatmak için initializer list'ini kullanabilirsiniz. Virgül ile ayrılmış başlatıcıları kullanın.
Uyarı
Initializer'ın sağ tarafı
this
'e erişim sağlamaz.
Geliştirme sırasında, initializer list içinde assert
kullanarak girişleri doğrulayabilirsiniz.
Initializer list'leri, final alanları ayarlamak için kullanışlıdır. Aşağıdaki örnek, üç final alanı initializer list içinde başlatır:
Yönlendiren Yapıcılar (Redirect Constructors)
Bazen bir constructor'ın tek amacı, aynı sınıftaki başka bir constructor'a yönlendirmektir. Yönlendiren constructor'ın gövdesi boştur ve constructor çağrısı (this
yerine sınıf adını kullanarak) iki nokta üst üste ile gösterildikten sonra gelir.
Sabit Yapıcılar (Constant Constructors)
Eğer sınıfınız, asla değişmeyen nesneleri üretiyorsa, bu nesneleri derleme zamanı sabitleri yapabilirsiniz. Bunun için bir const constructor tanımlayın ve tüm örnek değişkenlerinin final olduğundan emin olun.
Sabit constructor'lar her zaman sabitler oluşturmaz. Detaylar için constructor'ları kullanma bölümüne bakın.
Factory Yapıcılar (Factory ConstructorS)
Constructor'ın her zaman sınıfının yeni bir örneğini oluşturmadığını uyguladığınızda, bir constructor'ı implement etmek için factory
anahtar kelimesini kullanabilirsiniz. Örneğin, bir factory constructor, bir örneği önbellekten döndürebilir veya bir alt türün bir örneğini döndürebilir. Factory constructor'lar için bir başka kullanım da bir final değişkenini initializer list içinde ele alamayacak mantığı kullanarak başlatmaktır.
İpucu
Bir final değişkenini dikkatlice kullanmak için, bir final değişkenini geç başlatma yoluna başvurabilirsiniz!
Aşağıdaki örnekte, Gunluk
factory constructor'ı, nesneleri bir önbellekten döndürür ve Gunluk.fromJson
factory constructor'ı, bir JSON nesnesinden bir final değişkeni başlatır.
Not
Factory constructor'ları,
this
'e erişime sahip değildir.
Bir factory constructor'ını, diğer herhangi bir constructor gibi çağırın:
Last updated