Mobil Programcılık ✓DART Constructor

TebriZz

Üye
7 Nis 2020
152
1
İskenderun


5ewq9z.png


Merhaba arkadaşlar bu konumda sizlerle birlikte Dart Programlama 'nın yapıcı/kurucu metot kullanımını yani constructor 'u lanse edeceğim.Hemen konuya geçelim.

Bir sınıftan nesne oluşturduğumuz anda çalışmasını istediğimiz sınıf fonksiyonuna yapıcı/kurucu metot (constructer) diyoruz.

Her sınıfın varsayılan, içi boş bir yapıcı metodu vardır.

Örneğin ArabaTasarimi sınıfının varsayılan kurucu metodu

Kod:
ArabaTasarimi(){}

ya da

Kod:
ArabaTasarimi();

şeklinde ifade edilebilir.

Kullanabilmek için bu yazımlardan birini tercih ederek oluşturduğumuz sınıfın içinde yazmamız gerekir.

Kod:
class ArabaTasarimi {
    ArabaTasarimi();
}

Peki kurucu metot ne işimize yarıyor, onu nasıl kullanıyoruz.

Eğer bir nesnenin oluşturulurken bir değer verilerek oluşturulmasını ve oluşturulduğu anda bu değerle bir takım işler yapmasını istiyorsak kurucu metotları kullanırız.

Örneğin biz önceki konumuzda ArabaTasarimi sınıfına renk diye bir özellik vermiş ama değer atamamıştık.

Kod:
class ArabaTasarimi {
    String renk;
    ArabaTasarimi();
}

Nesneyi oluşturduktan sonra renk değeri vermiştik.

Kod:
ArabaTasarimi kirmiziAraba = ArabaTasarimi();
kirmiziAraba.renk = "Kırmızı";

Ama eğer sınıfı oluştururken kurucu metodu kullansaydık, nesneyi oluşturma aşamasında da kirmiziAraba'nın renk özelliğine "Kırmızı" değerini verebilirdik.

Kod:
class ArabaTasarimi {
    String renk;
    ArabaTasarimi(this.renk);
}

Kurucu metodun parantezleri içinde yazdığımız this.renk ifadesi, bu sınıfın içinde yazdığımız String renk değişkenini temsil ediyor. Yani this diyerek ArabaTasarimi sınıfının içindeki renk değişkeni olduğunu belirttik. Bu belirtmeyle birlikte eğer bu sınıftan bir nesne oluşturulacaksa, nesne oluşturulduğu anda bir değer vermemiz gerektiğini ve bu değerin renk değişkenine atanacağını ifade etmiş olduk.

Şimdi nesneyi oluşturalım.

Kod:
ArabaTasarimi kirmiziAraba = ArabaTasarimi("Kırmızı");
print(kirmiziAraba.renk);

Konsol Çıktısı:

Kod:
Kırmızı

Bu değişiklikler sadece bu nesne özelinde geçerlidir. Aynı sınıftan yeni bir nesne ürettiğimizde o sadece sınıfın varsayılan özelliklerini alacaktır. Kurucu metodu için vermemiz gereken değer de sadece o nesneye özel olacaktır.


Sınıfın birden fazla özelliği de olabilirdi. Bu durumda yapıcı metodun alacağı değerleri virgülle ayırarak hepsini yazabiliriz.
Kod:
class ArabaTasarimi {
    String renk;
    int uretimYili;
    String silecekDurumu;
    
    ArabaTasarimi(this.renk, this.uretimYili, this.silecekDurumu);
}

Nesneleri oluştururken de yapıcı metodun parantezleri içindeki tüm değerleri aynı sıra ile yazmamız gerekir.

Kod:
ArabaTasarimi kirmiziAraba = ArabaTasarimi("Kırmızı", 1972, "Çalışıyor");
ArabaTasarimi kirmiziAraba = ArabaTasarimi("Beyaz", 1972, "Çalışmıyor");

Şimdi işin içine fonksiyonları da dâhil edelim.

Kod:
class ArabaTasarimi {
    String renk;
    int uretimYili;
    String silecekDurumu;
    
    silecekleriCalistir(){
      print("Silecekler $silecekDurumu");
    }

    ArabaTasarimi(this.renk, this.uretimYili, this.silecekDurumu);
}

Artık nesneyi oluşturduktan sonra sınıf fonksiyonunu çalıştırdığımızda bize sileceklerin durumunu belirten bir mesaj gösterecek.

Kod:
ArabaTasarimi kirmiziAraba = ArabaTasarimi("Kırmızı", 1972, "Çalışıyor");
ArabaTasarimi kirmiziAraba = ArabaTasarimi("Beyaz", 1972, "Çalışıyor");

kirmiziAraba.silecekleriCalistir();
beyazAraba.silecekleriCalistir();
Konsol Çıktısı:

Kod:
Silecekler Çalışıyor

Silecekler Çalışmıyor

Eğer isteseydik constructer içeriğini aşağıdaki gibi yazarak fonksiyonların yaptığı işleri de yaptırabilirdik. Böylelikle nesne oluşturulduğu anda bu işler otomatik olarak yapılırdı. Bunun için constructer'ı normal fonksiyon yapısı gibi süslü parantezlerle birlikte yazmalıyız.

Kod:
class ArabaTasarimi {
    String renk;
    int uretimYili;
    String silecekDurumu;
    
    
    ArabaTasarimi(this.renk, this.uretimYili, this.silecekDurumu){
        print("$renk Arabanın Silecekleri $silecekDurumu");
    }

}

Nesneler oluşturulduğu anda kurucu metot çalışacağı için, metodun süslü parantezleri arasına yazdığımız print fonksiyonu da otomatik olarak çalışacak ve içindekileri konsola yazdıracak.

Kod:
ArabaTasarimi kirmiziAraba = ArabaTasarimi("Kırmızı", 1972, "Çalışıyor");
ArabaTasarimi kirmiziAraba = ArabaTasarimi("Beyaz", 1972, "Çalışmıyor");

Konsol Çıktısı:

Kod:
Kırmızı Arabanın silecekleri Çalışıyor

Beyaz Arabanın silecekleri Çalışmıyor

Şimdi kurucu metotların daha farklı şekillerde nasıl tanımlanabileceğine bakacağız ve bu sırada this anahtar kelimesini de daha iyi anlayabileceğimiz bir örneğimiz olacak.

Yukarıda yaptığımız örneklerde direkt kurucu metodun parantezi içine this.renk yazarak nesne oluştururken aldığımız değeri, sınıfın String renk değişkenine atayabilmiştik. Ama aslında kurucu metotların gerçek hâli aşağıda olduğu gibidir. Böylelikle farklı bir değişken ismi olan String boyaRengi ile nesne oluştururken verilen değeri (örneğin "Kırmızı" yı) alıyoruz daha sonra da sınıfın renk değişkenine başka bir kod satırı ile atıyoruz.

Kod:
class ArabaTasarimi {
    String renk;
    
    ArabaTasarimi(String boyaRengi){
        renk = boyaRengi;
    }

}

Yukarıdaki kodda bir sıkıntı yok. Onu kullanabilirsiniz. Ancak bu kodları aşağıdaki gibi yazmak istediğimizde this anahtar kelimesinin anlamı ortaya çıkıyor.

Kod:
class ArabaTasarimi {
    String renk;
    
    ArabaTasarimi(String renk){
        this.renk = renk;
    }

}

Burada kurucu metodun parantezleri arasına yazdığımız değişken ile, sınıfın varsayılan değişkeninin isimleri aynı: renk

Programın bu değişkenleri ayırt edebilmesi için this ifadesini kullandık. this.renk demek, sınıf özelliği olarak tanımladığımız String renk demek.

Kod:
this.renk = renk

Bu kodun sağına sadece renk olarak yazdığımız değişken ise kurucu metodun parantezleri arasındaki değişkeni ifade ediyor.

İşte this ifadesinin bu tip karışıklıkları önlemek ve değer atama işlemlerini ilk örneklerde gördüğümüz şekilde kısaltmak gibi işlevleri var.

İsimlendirilmiş Constructer
tYhEHq.gif


Eğer birden fazla kurucu metoda ihtiyaç duyarsak, isimlendirerek yeni kurucu metotlar oluşturabiliyoruz. Aşağıdaki satırda sınıf adından sonra sadece nokta koyup bir isim verdim. Artık toplam üç tane kurucu metodum olmuş oldu. Normal kurucular için geçerli olan her şey bunlar için de geçerli.

Kod:
class ArabaTasarimi {
    String renk;
    int uretimYili;
    
    ArabaTasarimi();

    ArabaTasarimi.ikinciKurucu(this.renk);
    
    ArabaTasarimi.ucuncuKurucu(int uretimYili){
      this.uretimYili = uretimYili;  
    }

}


Kullanımları için de aynı şey geçerli. Tek fark, bir nokta koyup isimlendirilmiş kurucunun adını yazmak.

Kod:
ArabaTasarimi kirmiziAraba = ArabaTasarimi.ikinciKurucu("Kırmızı");
ArabaTasarimi kirmiziAraba = ArabaTasarimi.ucuncuKurucu(1972);

Değerleri Süslü Parantezle Almak
tYhEHq.gif


Eğer aşağıdaki gbi kurucu metotların normal parantezleri içerisinde ekstra süslü parantez kullanırsa ve alınmasını belirttiğimiz değerleri süslü parantezler içerisine yazarsak, nesne oluşturma sırasında bunların verilmesi zorunlu değil demiş oluruz.

Kod:
class ArabaTasarimi {
  double fiyat;
  String renk;
  int uretimYili;

  ArabaTasarimi({this.fiyat});

  ArabaTasarimi.ikinciKurucu({this.renk, this.uretimYili});

  ArabaTasarimi.ucuncuKurucu({int uretimYili}) {
    this.uretimYili = uretimYili;
  }
}

Bu durumda, nesne oluştururken aşağıdaki şekilde sınıfın hangi özelliğine hangi değeri verdiğimizi belirtmemiz gerekir. Yani artık nesne oluştururken değer vermek zorunda değiliz.

Kod:
var kirmiziAraba = ArabaTasarimi.ikinciKurucu();
Ama verirsek de aşağıdaki gibi değişken adını yazıp iki nokta koymamız gerekiyor.

renk: "Mavi"

uretimYili: 1973;

gibi.

Kod:
var kirmiziAraba = ArabaTasarimi.ikinciKurucu(renk: "Mavi", uretimYili: 1973);
print(kirmiziAraba.renk);
print(kirmiziAraba.uretimYili);

Okuduğunuz için teşekkür ederim arkadaşlar normalde Mobil Programcılık serimiz sona ermişti fakat böyle bir bonus eklemek istedim.Ek olarak bu konuları erişilebilirlik açısından tek konu altında bulabilirsiniz.Tıkla Esen kalın

qofihN.gif

 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.