Menu
Coddy logo textTech

Varsayılan Yapıcı

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 10 / 110.

Bir sınıfta herhangi bir kurucu (constructor) tanımlamadığınızda, Dart otomatik olarak bir varsayılan kurucu sağlar. Bu, sadece sınıfın bir örneğini oluşturan, parametresiz bir kurucudur.

class Book {
  String title = 'Unknown';
  int pages = 0;
}

// Dart varsayılan bir yapıcı sağlar: Book()
Book myBook = Book();
print(myBook.title); // Unknown

Varsayılan yapıcı (default constructor) kodunuzda görünmezdir, ancak mevcuttur. Hiçbir argüman almaz ve nesneyi örnek değişkenlerine (instance variables) atadığınız varsayılan değerlerle başlatır.

Kendi yapıcı metodunuzu (constructor) tanımladığınızda, varsayılan yapıcı metot artık otomatik olarak sağlanmaz. Parametreli bir yapıcı metodun yanında hala argümansız bir yapıcı metot istiyorsanız, bunu açıkça oluşturmanız gerekir:

class Book {
  String title;
  int pages;

  // Açık varsayılan yapıcı
  Book() : title = 'Unknown', pages = 0;

  // Parametreli yapıcı
  Book.withDetails(this.title, this.pages);
}

Book book1 = Book();                      // Varsayılanı kullanır
Book book2 = Book.withDetails('Dart', 300); // Parametreliyi kullanır

Açık varsayılan yapıcı (explicit default constructor), başlangıç değerlerini atamak için bir başlatıcı listesi (iki noktadan sonraki kısım) kullanır. Bu desen, aynı sınıftan nesne oluşturmak için birden fazla yol sunmak istediğinizde kullanışlıdır.

challenge icon

Görev

Kolay

Hem örtük hem de açık varsayılan yapıcıları (default constructors) gösteren basit bir ürün envanter sistemi oluşturalım.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • product.dart: Ürün oluşturmak için iki yol sunan bir Product sınıfı tanımlayın:
    • Bir başlatıcı listesi (initializer list) kullanarak name değişkenini 'Unnamed' ve price değişkenini 0.0 olarak başlatan açık bir varsayılan yapıcı Product()
    • name ve price parametrelerini kabul eden isimlendirilmiş bir yapıcı Product.withDetails
    • Şunu yazdıran bir display() metodu: Product: [name] - $[price]
  • main.dart: Ürün sınıfınızı içe aktarın ve iki ürün oluşturun:
    • Biri varsayılan yapıcıyı kullanarak
    • Diğeri 'Laptop' ve 999.99 değerleriyle isimlendirilmiş yapıcıyı kullanarak
    Her ürün üzerinde display() metodunu çağırın.

Product sınıfınız iki örnek değişkene (instance variables) sahip olmalıdır:

  • String name
  • double price

Beklenen çıktı formatı:

Product: Unnamed - $0.0
Product: Laptop - $999.99

Kopya kağıdı

Bir sınıfta herhangi bir yapıcı (constructor) tanımlanmadığında, Dart otomatik olarak parametresiz bir varsayılan yapıcı (default constructor) sağlar:

class Book {
  String title = 'Unknown';
  int pages = 0;
}

Book myBook = Book(); // Uses implicit default constructor
print(myBook.title); // Unknown

Kendi yapıcınızı tanımladığınızda, varsayılan yapıcı artık otomatik olarak sağlanmaz. Hem argümansız bir yapıcıya hem de parametreli bir yapıcıya sahip olmak için bunları açıkça oluşturmanız gerekir:

class Book {
  String title;
  int pages;

  // Explicit default constructor with initializer list
  Book() : title = 'Unknown', pages = 0;

  // Named constructor
  Book.withDetails(this.title, this.pages);
}

Book book1 = Book();                      // Uses default
Book book2 = Book.withDetails('Dart', 300); // Uses named constructor

Açık varsayılan yapıcı (explicit default constructor), başlangıç değerlerini ayarlamak için (iki nokta üst üste işaretinden sonra) bir başlatıcı listesi (initializer list) kullanır.

Kendin dene

import 'product.dart';

void main() {
  // YAPILACAK: Varsayılan yapıcıyı kullanarak bir ürün oluşturun
  
  // YAPILACAK: 'Laptop' ve 999.99 ile isimlendirilmiş yapıcıyı kullanarak bir ürün oluşturun
  
  // YAPILACAK: Her ürün üzerinde display() metodunu çağırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler