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
finalolmalı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.