28- Dart Kurucu Constructor Metotlar

Constructur (Kurucu) Nedir?

Constructur Neden Kullanılır?

Yazımızın içeriğini aşağıdan video olarak izleyebilirsiniz.

Dart Flutter Dersleri Kurucu – Yapıcı Fonksiyonlar – Constructor Metotlar – Factory Yapılar

Constructor dediğimiz yapının bir diğer adı yapıcı, kurucu fonksiyondur.

Biz sınıfımızı oluştururken içerisine değişkenler atıyoruz. Bu değişkenleri bazen boş bırakıyoruz, varsayılan değerler vermiyoruz. Sınıf oluştururken bu sebepten dolayı hata alıyoruz ve late diyerek ya da soru işareti koyarak söz veriyoruz, sonra koyacağız diye,,, Ya sonra koymayı unutursak bu sefer boş bırakılanlar null değer almış olacak. Constructor yani kurucu metot kullanarak, nesne oluştururken değerlerin girilmesini zorunlu kılabiliriz. Aslında varsayılan olarak bizim sınıflarımızın içerisinde oluşurlar. Görünmeseler bile çalışırlar. Aşağıda bununla ilgili örnek mevcut.

Constructur (Kurucu Metot) Özellikleri?

  • Bir sınıftan nesne üretirken kullanılan yapılardır.
  • Görünmeseler bile aslında varsayılan olarak varlardır.
  • Bir nesne ürettiğimizde otomatik olarak ilk çalışan metottur.
  • Kurucu metotlar boş olabildiği gibi parametre de alabilirler.
  • Kurucu metotların geri dönüş tipleri yoktur.
  • Ana Kurucu metot sadece bir tane olur.
  • İsimlendirilmiş kurucu metot istediğimiz kadar oluşturabiliriz.

Parametre Almayan Kurucu Metot

Kurucu metodumuzun çağırmasak ta varsayılan olarak ilk çalıştığını kanıtlayalım.

void main(List<String> args) {
  Araba bmw = Araba(); 
  //araba sınıfından bir nesne ürettik
  
}
// Araba sınıfımızı oluşturduk
class Araba {
  String? renk;
  bool? otomatikmi;

  // Kurucu fonksiyonumuz.
  // Hiçbiryerde çağırmasakta varsayılan olarak çalıştı
  Araba() {
    print("ilk çalışan metot");
  }
  
}

//SONUÇ ilk çalışan metot
Dart Parametre Almayan Kurucu Metot

Parametre Alan Kurucu Metot

void main(List<String> args) {
  Araba bmw = Araba("kırmızı", true);
  //araba sınıfından bir nesne ürettik
  bmw.bilgiVer();
}

class Araba {
  String? renk;
  bool? otomatikmi;

  // Kurucu fonksiyonumuz.
  // Hiçbiryerde çağırmasakta varsayılan olarak çalıştı
    Araba(String renk, bool otomatikmi)//kullanıcıdan veri istiyoruz 
    {
    this.renk = renk;             //Aldığımız rengi atadık
    this.otomatikmi = otomatikmi; //Aldığımız otomatikmi değerini atadık
    print("ilk çalışan metot");
    }
  bilgiVer() {print("Aracımız $renk renkte ve otomatik mi $otomatikmi"); }
}

//SONUÇ
//ilk çalışan metot
//Aracımız kırmızı renkte ve otomatik mi true

Dart Parametre Alan Kurucu Metot

Örneğimizi geliştirelim

void main(List<String> args) {
  Araba bmw = Araba("bmw", "kırmızı", "zenon", true, true);
  bmw.bilgiVer();
  var mercedes = Araba("mercedes", "beyaz", "led", true, true);
  mercedes.bilgiVer();
}

class Araba {
  String? marka;
  String? renk;
  String? fartipi;
  bool? derikoltukmu;
  bool? otomatikmi;

  Araba(String marka, String renk, String fartipi, bool derikoltukmu, bool otomatikmi) 
  {
    this.marka = marka;
    this.renk = renk;
    this.otomatikmi = otomatikmi;
    this.fartipi = fartipi;
    this.derikoltukmu = derikoltukmu;
    print("ilk çalışan metot");
  }
  bilgiVer() {
    print("Aracımız $marka, $renk renkte, $fartipi, deri koltuk mu? $derikoltukmu ve otomatik mi $otomatikmi");
  }
}

//SONUÇ
//ilk çalışan metot
//Aracımız bmw, kırmızı renkte, zenon, deri koltuk mu? true ve otomatik mi true
//ilk çalışan metot
//Aracımız mercedes, beyaz renkte, led, deri koltuk mu? true ve otomatik mi true
Dart Parametre Alan Kurucu Metot

Named Constructor (İsimlendirilmiş Kurucu) Metot

Arkadaşlar biz kurucu metodumuzu oluşturduk ve bundan sadece bir tane oluşturabiliyorduk. Peki biz sınıfımızdan nesne üretirken kurucu metodumuza tanımladığımız parametrelerin hepsini vermek istemezsek? Mesela renk girmek istemiyoruz. O zaman kurucu metodumuzdan türetelim ve isimlendirilmiş kurucu metotlar oluşturalım.

void main(List<String> args) {
  //Örnek nesnelerimiz
  Araba bmw = Araba("bmw", "kırmızı", "zenon", true, true);
  //var ile de nesnemizi üretebiliriz
  var mercedes = Araba("mercedes", "beyaz", "led", true, true);
  var reno = Araba.renk_marka_Yok("zenon", true, true);
}

//Sınıfımız
class Araba {
  String? marka;
  String? renk;
  String? fartipi;
  bool? derikoltukmu;
  bool? otomatikmi;

//kurucu metodumuz
  Araba(String marka, String renk, String fartipi, bool derikoltukmu,bool otomatikmi) {
    this.marka = marka;
    this.renk = renk;
    this.otomatikmi = otomatikmi;
    this.fartipi = fartipi;
    this.derikoltukmu = derikoltukmu;
    print("Aracımız $marka, $renk renkte, $fartipi, deri koltuk mu? $derikoltukmu ve otomatik mi $otomatikmi");
  }
  //isimlendirilmiş kurucu metot
  Araba.renk_marka_Yok(String fartipi, bool otomatikmi, bool derikoltukmu) {
    this.fartipi = fartipi;
    this.otomatikmi = otomatikmi;
    this.derikoltukmu = derikoltukmu;
    print("Aracımız $fartipi, deri koltuk mu? $derikoltukmu ve otomatik mi $otomatikmi");
  }
}

//SONUÇ
//Aracımız bmw, kırmızı renkte, zenon, deri koltuk mu? true ve otomatik mi true
//Aracımız mercedes, beyaz renkte, led, deri koltuk mu? true ve otomatik mi true
//Aracımız zenon, deri koltuk mu? true ve otomatik mi true
Dart İsimlendirilmiş Kurucu Metot
Dart İsimlendirilmiş Kurucu Metot Sonuçlar

Biz gelen değerlerimizi this.fartipi= fartipi diyerek aktarmıştık. Bunu kısaltalım. Aşağıdaki aynı örnek.

void main(List<String> args) {
  Araba bmw = Araba("bmw", "kırmızı", "zenon", true, true);
  var mercedes = Araba("mercedes", "beyaz", "led", true, true);
  var reno = Araba.renk_marka_Yok("zenon", true, true);
}

class Araba {
  String? marka;
  String? renk;
  String? fartipi;
  bool? derikoltukmu;
  bool? otomatikmi;

  Araba(this.marka, this.renk, this.fartipi, this.derikoltukmu, this.otomatikmi) { 
    print("Aracımız $marka, $renk renkte, $fartipi, deri koltuk mu? $derikoltukmu ve otomatik mi $otomatikmi");
  }
  Araba.renk_marka_Yok(this.fartipi, this.otomatikmi, this.derikoltukmu) {
    print("Aracımız $fartipi, deri koltuk mu? $derikoltukmu ve otomatik mi $otomatikmi");
  }
}

//SONUÇ
//Aracımız bmw, kırmızı renkte, zenon, deri koltuk mu? true ve otomatik mi true
//Aracımız mercedes, beyaz renkte, led, deri koltuk mu? true ve otomatik mi true
//Aracımız zenon, deri koltuk mu? true ve otomatik mi true
Dart İsimlendirilmiş Kurucu Metot

Factory Kurucu Metot

Normalde kurucu metotlar geriye bir değer döndürmez. Factory kurucu metodumuz ise özel bir metottur ve geriye değer döndürür.

void main(List<String> args) {
  var ogr1 = Ogrenci(-999, "mehmet");
  ogr1.bilgial();
  var ogr2 = Ogrenci.ogrenciNoKontrol(-999, "ayse");
  ogr2.bilgial();
}
class Ogrenci {
  int? ogrNo;
  String? ogrAd;

  Ogrenci(this.ogrNo, this.ogrAd) {}

  factory Ogrenci.ogrenciNoKontrol(int ogrno, String ograd) {
    if (ogrno < 0) {
      return Ogrenci(ogrno = 1, ograd);
    } else
      return Ogrenci(ogrno, ograd);
  }
  bilgial() {
    print("$ogrAd , $ogrNo");
  }
}

//SONUÇ
//mehmet , -999
//ayse , 1

Dart Factory Kurucu Metot

2 thoughts on “28- Dart Kurucu Constructor Metotlar”

  1. Küçücük bir düzeltme:

    ilk uygulamada Araba class YEŞİL renk, altındaki Araba fonksiyonu MAVİ renk yazmışsınız..
    Ancak, nesne türetirken MAVİ renk yazılmış,yani
    Araba bmw = Araba(); deki Araba class old.için YEŞİL olmalı..

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir