Sobes.tech
Junior

Dart dilinde farklı yapıcı türleri neden kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Dart'ta, nesneleri oluşturmak ve çeşitli ihtiyaçlara göre esneklik sağlamak için farklı yapıcı türleri kullanılır:

  • Nesne başlatma: Sınıfın alanlarının başlangıç değerlerini belirlemek.
  • İnstance oluşturma esnekliği: Gereksinimlere göre farklı nesne oluşturma yolları sunmak (zorunlu veya isteğe bağlı parametreler, fabrika yöntemi vb.).
  • Niyetin açıklığı: Belirli bir nesne oluşturma yöntemini tanımlamak için isimlendirilmiş yapıcılar kullanmak.

Ana yapıcı türleri:

  • Varsayılan yapıcı (unnamed constructor):

    • Basit nesne oluşturmak için kullanılır.
    • Zorunlu veya isteğe bağlı (isimlendirilmiş veya pozisyonel) parametreler içerebilir.
    class MyClass {
      String name;
    
      // Varsayılan yapıcı
      MyClass(this.name); 
    }
    
  • İsimlendirilmiş yapıcı (named constructor):

    • Birden fazla nesne oluşturma yolu sağlar, her biri kendine özgü bir isim alır.
    • Farklı kaynaklardan veya farklı durumlarda nesne oluşturmak gerektiğinde kullanışlıdır.
    class MyClass {
      String name;
      int age;
    
      MyClass(this.name, this.age);
    
      // İsimlendirilmiş yapıcı
      MyClass.fromMap(Map<String, dynamic> map) {
        name = map['name'];
        age = map['age'];
      }
    }
    
  • Fabrika yapıcı (factory constructor):

    • Doğrudan yeni bir sınıf örneği oluşturmaz.
    • Mevcut bir örneği, alt sınıfı veya fabrika metodunda oluşturulan bir örneği dönebilir.
    • Tasarım desenleri, önbellekleme veya farklı alt tipleri döndürmek için kullanılır.
    class Logger {
      static final Map<String, Logger> _cache = <String, Logger>{};
    
      // Fabrika yapıcı
      factory Logger(String name) {
        if (_cache.containsKey(name)) {
          return _cache[name]!;
        } else {
          final logger = Logger._internal(name); // Özel yapıcıyı çağır
          _cache[name] = logger;
          return logger;
        }
      }
    
      // İç kullanım için özel isimlendirilmiş yapıcı
      Logger._internal(this.name); 
    
      final String name;
    
      void log(String message) {
        print('[$name] $message');
      }
    }
    
  • Sabit yapıcı (const constructor):

    • Sabit sınıf örnekleri oluşturur.
    • Tüm alanlar final olmalıdır.
    • Derleme zamanında değiştirilemez nesneler oluşturmak için kullanılır, bu performansı artırır ve Dart'ın daha fazla optimizasyon yapmasını sağlar.
    class Point {
      final double x;
      final double y;
    
      // Sabit yapıcı
      const Point(this.x, this.y); 
    }
    

Farklı yapıcı türlerinin kullanımı, Dart'ta daha ifadeli, esnek ve performanslı kodlar yazmayı sağlar.