Junior
Dart tilida turli turdagi konstruktorlar nima uchun ishlatiladi?
sobes.tech AI
AIdan javob
Dartda, turli turdagi konstruktorlar quyidagilar uchun ishlatiladi:
- Obyektlarni boshlang‘ich holatga keltirish: Sinf maydonlarining boshlang‘ich qiymatlarini o‘rnatish.
- Yaratish jarayonida moslashuvchanlik: Kerakli holatga qarab obyektni yaratish uchun turli usullarni taqdim etish (majburiy yoki ixtiyoriy parametrlar, fabrikadan yaratish va boshqalar).
- Niyatni aniqroq ifodalash: Aniq obyekt yaratish usulini tavsiflash uchun nomlangan konstruktorlardan foydalanish.
Asosiy konstruktor turlari:
-
Standart konstruktor (nomlanmagan konstruktor):
- Oddiy obyekt yaratish uchun ishlatiladi.
- Majburiy yoki ixtiyoriy (nomlangan yoki pozitsion) parametrlar bo‘lishi mumkin.
class MyClass { String name; // Standart konstruktor MyClass(this.name); } -
Nomlangan konstruktor:
- Bir nechta obyekt yaratish usullari bo‘lishi mumkin, har biri o‘ziga xos nomga ega.
- Turli manbalardan yoki turli holatlarda obyekt yaratish zarur bo‘lsa, foydalidir.
class MyClass { String name; int age; MyClass(this.name, this.age); // Nomlangan konstruktor MyClass.fromMap(Map<String, dynamic> map) { name = map['name']; age = map['age']; } } -
Fabrik konstruktor:
- To‘g‘ridan-to‘g‘ri yangi sinf nusxasini yaratmaydi.
- Mavjud nusxani, voris sinfni yoki fabrik metodida yaratilgan nusxani qaytarishi mumkin.
- Dizayn shablonlarini, kesh qilishni yoki turli pastki turlarni qaytarishni amalga oshirish uchun ishlatiladi.
class Logger { static final Map<String, Logger> _cache = <String, Logger>{}; // Fabrik konstruktor factory Logger(String name) { if (_cache.containsKey(name)) { return _cache[name]!; } else { final logger = Logger._internal(name); // Xususiy konstruktorni chaqirish _cache[name] = logger; return logger; } } // Ichki foydalanish uchun xususiy nomlangan konstruktor Logger._internal(this.name); final String name; void log(String message) { print('[$name] $message'); } } -
Konsst konstruktor:
- Konstant nusxalar yaratadi.
- Sinfning barcha maydonlari
finalbo‘lishi kerak. - Kompilyatsiya vaqtida o‘zgarmas obyektlar yaratish uchun ishlatiladi, bu esa unumdorlikni oshiradi va Dartga ko‘proq optimallashtirish imkonini beradi.
class Point { final double x; final double y; // Konstant konstruktor const Point(this.x, this.y); }
Turli konstruktor turlaridan foydalanish Dartda kodni yanada ifodali, moslashuvchan va samarali qilish imkonini beradi.