Swift 5.3 OOP 4 : Swift Constructor (Swift Initialization İşlemi)

Diğer programlama dillerinden aşina olduğumuz Constructor kavramının Swift dilinde ki karşılığı Initialization. Yani init etmek başlatmak koşturmak manasında kullanılır.Constructor mantığı ile birebir aynıdır sadece ismini değiştirmişler 🙂

Swift dilinde Constructor yapısı sadece Class'lara ait bir özellik değildir.Hani anlamadığınız struct yapısı vardı Class'lara çok benzeyen ama aslında Class olmayan :) İşte orada da kullanılabilir . Şimdi ilk olarak Class yapısına bakalım:
  • Aslında biz var nesne : Öğrenci = Ogrenci() dediğimiz zaman default Constructor’ı referans etmiş oluyoruz.
  • Ayrıca nesne üzerinden değişkenlere değer atamayıda görmüştük: 
  • Aksi belirtilmedikçe aslında sınıfların default Constructor var olarak kabul edilir. Yanı aslında biz default Constructor çağırmış olduk.
  • Ayrıca Constructor yapısının bir return değeri yoktur.

Default Constructor dediniz ama nereden bu ? Merak etmeyin Class yapılarında hayalet bir Constructor vardır .Eğer tanımlamazsanız hiç bir sorun olmaz .Eğer tanımlarsanız da şimdi olanlara bakalım 🙂

  • evet şimdi default Constructor ta tanımladığım kod bloklarının çalıştığını görebiliriz.
  • Çünkü nesnem oluşturken default Constructor referans etmiş oldu.

Şimdi eğer Constructor çağrıldığında veri set etme işlemi yapmak istiyorsak onuda aşağıda ki görselde ki gibi yapabilirim:

  • Dikkat ettiyseniz Constructor isimleri aynı.İŞte burada Çok biçimlilik örneğinde görmüştük isimler aynı lakin nasıl karışmıyor ? Çünkü Çok Biçimlilik kavramı devreyi giriyor (polimorfizm) ve aynı isimli olsa dahi biz hangisini çağırırsak o devreye giriyor olay bu .
  • Biz işlemlerimizi yaparken 2 Constructor yapsını da kullanabiliriz.Aslında zaten Constructor dediğimiz olay 2. olandır .İlk olan Constructor default olan Constructor yapısıdır.

Şimdi nesne üzerinden Constructor yapımın veri tiplerini hangi şekilde tanımlasaydık o şekilde verileri gönderiyorum.Veri tiplerine dikkat ediyoruz.Şimdi ise kapsülleme yapıyoruz.

şimdi ise Constructor üzerine gönderdiğim verileri okuma vakti.Bunun için get fonksiyonlarım devreye giriyor.

Böylelikle hem kapsülleme ve yapıcı methdoları bir arada kullanarak işlem yapmış olduk.

Hadi şimdi default Constructor kullanmama gerek olmadığını düşündük diyelim ve kodlarımı sildim bakalım ne olacak 🙂

AAA o ne ? Program patladı !!!!

  • Bunu sebebi ilk başta nesnemi oluştururken default Constructor referans etmemden kaynaklanıyor.Eğer bir sınıfta 1 adet default Constructor ve 1 adet parametre alan Constructor tanımladıysam bazı kurallar var.Şimdi benim sınıfımda sadece 1 adet parametre alan Constructor tanımlı .Yanı demek oluyor ki ben nesnemi oluştururken mutlaka artık ona parametre eklemem gerek .Parametre eklenmediği için bu şekilde bir hata var.

Şimdi ise parametrelerimi ekledim ve hata vermedi:

  • Gördüğümüz gibi boş Constructor kullanarak tanımladığımız nesneler hata verdi.
  • Bunun sebebi eğer bir sınıfta parametre alan Constructor var ise ve aynı zamanda Paremetre almayan Constructor kullanacaksak eğer mutluka Class içinde tanımlamamız gerekir.
  • Şimdi biz tekrardan sildiğimiz Constructor geri ekleyelim çünkü biz ikisinide kullanıcaz 🙂 Default Constructor kodlarımı tekrar aktif ettim.

Diyelim ki biz tek bir nesne tanımlayıp o nesne üzerinden parametre alan Constructor kullanmak istiyoruz.Tamam ama Constructor koşmadan önce de bazı önemli kodlarım var ve bu kodlar default Constructor içinde tanımladı diyelim.Öncelikle şuan ki durumu göstereyim:

Bakınız default Constructor içinde ki kodlar çalışmıyor.EEE ! Ne yapıcaz şimdi bir tane daha mı nesne tanımlamam gerek ? Peki nesneyi default Constructor olarak oluştursam daha sonra parametre versem ? Sonuçta 2 adet Constructor yapım var ?Ayrıca Polimorfizm den fayadalanabilirim Hadi deneyelim:

  • Evet çalıştı bu da bir yöntem istediğim şekilde çalıştı ama bu benim kendi çözümüm olsun 🙂

Leave a Reply

*