Merhabalar.

Sınıf konumuza Constructor kavramı ile devam ediyoruz.

Her sınıfın bir yapıcı yani Constructor metodu vardır.

Eğer biz bunu yazmaz isek boş olarak yazılmış gibi işler.

Constructor metod sınıfın ismiyle aynı ismi taşır.

class Personal{

  String name;
  String lastName;
  String number;
  int age;

  Personal(){

  }

}
Personal(){

  }

Gördüğümüz kısım constructor’dır.

Yapıcı metodlar bir sınıftan nesne türetildiği anda çalışırlar. Yani nesne türetilir türetilmez yapılmasını istediğimiz bir işlem varsa bu metod içine yazılabilir.

Bunu anlamak için yapıcı metodun içine bir print ifade yazalım.

class Personal{

  String name;
  String lastName;
  String number;
  int age;

  Personal(){
    print("Yapıcı Metod Çalıştı");
  }

}

Şimdi main metodu içinde sadece personal’den bir instace üretelim.

Sadece bunu yapalım ve kodları çalıştıralım.



import 'package:hello_dart/01_personal.dart';

void main(){

  Personal Ahmet = Personal();

  Ahmet.name = "Ahmet";
  Ahmet.lastName = "Bilginer";
  Ahmet.number = "0 345 667 56 56";
  Ahmet.age = 20;

  print("${Ahmet.name} ${Ahmet.lastName}\n${Ahmet.number} - ${Ahmet.age} ");

  Personal Ayse = Personal();

  Ayse.name = "Ayşe";
  Ayse.lastName = "Bilginer";
  Ayse.number = "0 656 548 45 45";
  Ayse.age = 45;

  print("${Ayse.name} ${Ayse.lastName}\n${Ayse.number} - ${Ayse.age} ");

  Personal Murat = Personal();

}
H:\Dart_Tutorial\hello_dart\bin_Classes>dart 01_main.dart
Yapıcı Metod Çalıştı
Ahmet Bilginer
0 345 667 56 56 - 20
Yapıcı Metod Çalıştı
Ayşe Bilginer
0 656 548 45 45 - 45
Yapıcı Metod Çalıştı

Gördüğünüz gibi sadece nesneyi türetmemiz kodun çalışması için yetti.

Bir sınıftan nesne türetildiği anda bazı bilgilerin mutlaka verilmesini istiyorsak bunu constructor metoda parametreler vererek zorlayabiliriz.

Örneğin Personal sınıfından nesne türetilirken daha sınıfa ait özelliklere bilgilerin verilmesini isteyebiliriz.

Bunun için şunu yapmamız gerekecek.

class Personal{

  String name;
  String lastName;
  String number;
  int age;

 /* Personal(){
    print("Yapıcı Metod Çalıştı");
  } */

   Personal(String name, String lastName, String number, int age){
     this.name = name;
     this.lastName = lastName;
     this.number = number;
     this.age = age;
   }

}

Sınıf içindeki özelliklere sınıf içinde this anahtar kelimesi ile erişilir.

Personal metoduna verdiğimiz parametreler bu arada illaki propertylerle aynı isimde olmak zorunda değil. Sadece daha kolay anlayabilelim diye böyle isimlendiriyoruz.

Şimdi bu işlemi yaptıktan sonra main metodu içinde bir instance türetelim.

Artık göreceksiniz ki gerekli parametre değerlerini geçmeden nesne türetemeyeceğiz.

import 'package:hello_dart/01_personal.dart';

void main() {
/*
  Personal Ahmet = Personal();

  Ahmet.name = "Ahmet";
  Ahmet.lastName = "Bilginer";
  Ahmet.number = "0 345 667 56 56";
  Ahmet.age = 20;

  print("${Ahmet.name} ${Ahmet.lastName}\n${Ahmet.number} - ${Ahmet.age} ");

  Personal Ayse = Personal();

  Ayse.name = "Ayşe";
  Ayse.lastName = "Bilginer";
  Ayse.number = "0 656 548 45 45";
  Ayse.age = 45;

  print("${Ayse.name} ${Ayse.lastName}\n${Ayse.number} - ${Ayse.age} ");

  Personal Murat = Personal();
*/

  Personal Murat = Personal("Murat", "Bilginer", "0 564 456 45 67", 28);

}
Personal Murat = Personal("Murat", "Bilginer", "0 564 456 45 67", 28);

Bu şekilde ilk değerlerini vermiş olduk.

Bunu sınıf tarafında bu kadar uzun uzun yapmamıza gerek kalmadan halledebiliyorduk. O da şöyle.

class Personal{

  String name;
  String lastName;
  String number;
  int age;

 /* Personal(){
    print("Yapıcı Metod Çalıştı");
  } */
/*
   Personal(String name, String lastName, String number, int age){
     this.name = name;
     this.lastName = lastName;
     this.number = number;
     this.age = age;
   }
*/
     Personal(this.name, this.lastName, this.number, this.age){
       
     }
}
 Personal(this.name, this.lastName, this.number, this.age){
       
     }

Yukarıdaki gibi direkt olarak parametre kısmında değerleri almasını sağlayabiliyoruz. Bu da işimizi kod yükümüzü biraz hafifletiyor.

Dart’da overloading olmadığı için aynı metodun farklı parametreli hallerini türetemeyiz bu unutulmamalı.

Dart bize isimlendirilmiş yapıcı metodlar yaratmamıza olanak verir.

Örneğin bazen yaş bilgisinin nesne daha türetilirken alınmasını istemeyebiliriz. Ya da diğer durumlar.

Bunun için parametreleri buna göre özelleştirilmiş bir isimlendirilmiş yapıcı metod oluşturmak gerekir.

class Personal{

  String name;
  String lastName;
  String number;
  int age;

 /* Personal(){
    print("Yapıcı Metod Çalıştı");
  } */
/*
   Personal(String name, String lastName, String number, int age){
     this.name = name;
     this.lastName = lastName;
     this.number = number;
     this.age = age;
   }
*/
     Personal(this.name, this.lastName, this.number, this.age){

     }

     Personal.NoAge(this.name, this.lastName,this.number){
       
     }
}
Personal.NoAge(this.name, this.lastName,this.number){
       
     }
import 'package:hello_dart/01_personal.dart';

void main() {
/*
  Personal Ahmet = Personal();

  Ahmet.name = "Ahmet";
  Ahmet.lastName = "Bilginer";
  Ahmet.number = "0 345 667 56 56";
  Ahmet.age = 20;

  print("${Ahmet.name} ${Ahmet.lastName}\n${Ahmet.number} - ${Ahmet.age} ");

  Personal Ayse = Personal();

  Ayse.name = "Ayşe";
  Ayse.lastName = "Bilginer";
  Ayse.number = "0 656 548 45 45";
  Ayse.age = 45;

  print("${Ayse.name} ${Ayse.lastName}\n${Ayse.number} - ${Ayse.age} ");

  Personal Murat = Personal();
*/

  Personal Murat = Personal("Murat", "Bilginer", "0 564 456 45 67", 28);

  Personal Meryem = Personal.NoAge("Meryem", "Yalvaç", "0 523 432 43 54");



}
 Personal Meryem = Personal.NoAge("Meryem", "Yalvaç", "0 523 432 43 54");

Bu şekilde her durum için bir yapıcı metod oluşturulabilir.

Yapıcı metodlar bu kadardı.

Bir sonraki yazımda görüşmek üzere.


What's Your Reaction?

hate hate
0
hate
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win
Murat Bilginer
21 Şubat 1992 Doğumlu. Endüstri Mühendisi olarak Lisansını 2016 yılında tamamlamıştır. Industryolog Akademi - NGenius oluşumlarının kurucusudur. Şu anda kendi şirketi Brainy Tech ile hem Yazılım Hizmetleri Sunmakta Hem de Online Eğitimler Vermektedir.