Dart Dilinde Kurucu Metotlar (Constructor)
Dart dilinde kurucu metotlar, bir başka deyişle yapıcı metotlar, bir sınıftan (class) nesne (object) üretirken kullanılan yapılardır.
Dart Dilinde Kurucu Metotlar
Kurucu metotlara ait genel özellikleri maddeler halinde aşağıda derlenmiştir:
- Bir sınıftan nesne üretirken kullanılır.
- Kod olarak yazılmasa dahi varsayılan olarak varlardır.
- Bir sınıftan nesne ürettiğimizde otomatik olarak çalışır.
- Bir sınıftan üretilen her yeni nesne ayrı ayrı varsayılan olarak kurucu metodu çalıştırır.
- Kurucu (yapıcı) metotlar parametre alabildiği gibi boş da olabilir.
- Bu metotlar geri dönüş (return) yapmazlar
- Varsayılan kurucu metot ancak 1 kere oluşturulabilir.
- İsimlendirilmiş kurucu metot ise farklı isimlerde olmak şartıyla istenilen sayıda oluşturulabilir.
- Kurucu metodun adı, sınıf adıyla aynı olmalıdır.
Aşağıda kurucu metodu oluştururken kullanılan sözdizimi (syntax) gösterilmiştir:
1 2 3 4 5 |
class SinifAdi { SinifAdi() { //Kurucu metodun gövdesi (constructor body) } } |
Kurucu metotların özelliklerini belirtirken kod olarak yazılmasa dahi otomatik olarak program onu çalıştırır demiştik. Bu durumu aşağıdaki örneklerde görebilirsiniz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void main() { Araba toyota = Araba(); toyota.model = 2002; toyota.renk = "Kırmızı"; toyota.arabaBilgileri(); } class Araba { int? model; String? renk; void arabaBilgileri(){ print("Arabanın modeli: $model"); print("Arabanın markası: $renk"); } } |
Çıktı:
Arabanın modeli: 2002
Arabanın markası: Kırmızı
Şimdi aynı örneğimizi kurucu metodun kodunu yazarak gösterelim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void main() { Araba toyota = Araba (); toyota.model = 2002; toyota.renk = "Kırmızı"; toyota.arabaBilgileri(); } class Araba { int? model; String? renk; //Kodu yazmasak bile bellek tarafından otomatik olarak çalışan kurucu metodumuz: Araba (){ //print("Kurucu metot (constructor) çalıştı"); } void arabaBilgileri(){ print("Arabanın modeli: $model"); print("Arabanın markası: $renk"); } } |
Çıktı:
Arabanın modeli: 2002
Arabanın markası: Kırmızı
Kodu çalıştırmak için: DartPad
Kurucu Metot Çeşitleri
Dart’ta 3 adet kurucu metot çeşidi bulunmaktadır. Bunlar sırasıyla aşağıdaki gibidir:
- Varsayılan Kurucu Metotlar (Default Constructor)
- Parametre Alan Kurucu Metotlar (Parameterized Constructor)
- İsimlendirilmiş Kurucu Metotlar (Named Constructor)
Varsayılan Kurucu Metot (Default Constructor)
Bunlar yukarıdaki anlattığımız örneklerde gördüğümüz kurucu metotlardır. Eğer herhangi bir kurucu metot oluşturulmazsa, derleyici sınıf için otomatik olarak varsayılan bir kurucuyu (argümansız) oluşturur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void main() { Araba toyota = Araba(); toyota.model = 2002; toyota.renk = "Kırmızı"; toyota.arabaBilgileri(); } class Araba { int? model; String? renk; void arabaBilgileri(){ print("Arabanın modeli: $model"); print("Arabanın markası: $renk"); } } |
Parametre Alan Kurucu Metotlar (Parameterized Constructor)
Kurucu metotlar, örnek değişkenlerini başlatmak için kullanılan parametreleri de alabilir. Adından da anlaşılacağı üzere parametre alan bu kurucu metotlara parametre alan kurucu metotlar denir. Özellikle örnek değişkenleri kendi değerleriyle başlatmak istiyorsak, parametreli bir kurucu kullanmamız gerekir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void main() { Araba toyota = Araba (2020, "Mavi"); toyota.arabaBilgileri(); } class Araba { int? model; String? renk; Araba (int model, String renk){ print("Kurucu metot (constructor) çalıştı"); this.model = model; this.renk = renk; } void arabaBilgileri(){ print("Arabanın özellikleri"); print("Arabanın modeli: $model"); print("Arabanın rengi: $renk"); } } |
Çıktı:
Kurucu metot (constructor) çalıştı
Arabanın özellikleri
Arabanın modeli: 2020
Arabanın rengi: Mavi
Kodu çalıştırmak için: DartPad
İsimlendirilmiş Kurucu Metotlar (Named Constructor)
Dart dilinde isimlendirilmiş kurucu metotlar, diğer iki kurucu metot türünden farklı olarak bir sınıfın birden çok kurucu metot tanımlayabilmesini sağlar. Aynı isimdeki sınıfımıza ait farklı özellikteki nesnelerini oluşturmak için bu yöntem kullanılır. Zira nesne üretirken kurucu metoda tanımladığımız parametrelerin hepsini kullanmak istemeyebiliriz.
İsimlendirilmiş kurucu metotların sözdizimi aşağıdaki gibidir:
1 |
SinidAdi.kurucuMetotunAdi(parametreler) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
void main() { Araba toyota = Araba (2020, "Mavi"); toyota.arabaBilgileri(); Araba ford = Araba.birinciIsimlendirilmisMetot(2010, "Pembe"); ford.arabaBilgileri(); //var kullanılabilir var audi = Araba.ikinciIsimlendirilmisMetot(2002, "Turuncu"); audi.arabaBilgileri(); } class Araba { int? model; String? renk; //Parametre Alan Kurucu Metot (Yalnızca 1 tane olur) Araba (int model, String renk){ print("Parametre Alan Kurucu Metot çalıştı"); this.model = model; this.renk = renk; } //isimlendirilmiş kurucu metot (1'den fazla olabilir) Araba.birinciIsimlendirilmisMetot(int model, String renk){ print("Birinci isimlendirilmiş kurucu metot çalıştı"); this.model = model; this.renk = renk; } //this anahtar kelimelerini aşağıdaki gibi yazabiliriz. Araba.ikinciIsimlendirilmisMetot(this.model, this.renk){ print("İkinci isimlendirilmiş kurucu metot çalıştı"); } void arabaBilgileri(){ print("Arabanın özellikleri"); print("Arabanın modeli: $model"); print("Arabanın rengi: $renk"); } } |
Çıktı:
Parametre Alan Kurucu Metot çalıştı
Arabanın özellikleri
Arabanın modeli: 2020
Arabanın rengi: Mavi
Birinci isimlendirilmiş kurucu metot çalıştı
Arabanın özellikleri
Arabanın modeli: 2010
Arabanın rengi: Pembe
İkinci isimlendirilmiş kurucu metot çalıştı
Arabanın özellikleri
Arabanın modeli: 2002
Arabanın rengi: Turuncu
Kodu çalıştırmak için: DartPad
Merhaba neden kurucu constructorlar geriye eğer döndürmez?
Kurucular (constructors) bir nesnenin örneklendiği zaman çalıştırılan fonksiyonlardır. Nesnenin doğru bir şekilde başlatılmasını sağlamak için kullanılırlar.
Kurucunun temel amacı, sınıftan bir nesne oluşturulduğunda bu nesnenin başlangıç durumunu ayarlamaktır. Eğer bir kurucu bir değer döndürebilseydi, bu durumda ne tür bir değeri döndüreceği sorusu ortaya çıkardı. Kurucunun dönüş değeri, o sınıftan oluşturulan yeni nesne olmalıdır ve bu nedenle kurucuların geriye bir değer döndürmesine gerek yoktur.
Özetle, kurucuların geriye değer döndürmemesinin nedeni, onların temel işlevinin nesneyi başlatmak olduğudur. Bu işlevi yerine getirdikten sonra, kurucunun dönüş değeri olarak oluşturduğu nesnenin kendisi kullanılır. Bu nedenle, kurucuların herhangi bir değer döndürmesine ihtiyaç duyulmaz.