Junior
Чаро дар забони Dart намудҳои гуногуни конструкторҳо истифода мешаванд?
sobes.tech AI
Ҷавоб аз AI
Дар Dart намудҳои гуногуни конструкторҳоро истифода мебарад:
- Инициализатсияи объектҳо: Танзими арзишҳои ибтидоии майдонҳои синф дар вақти эҷоди он.
- Флексибилитет дар эҷоди намунаҳо: Таҳия кардани роҳҳои гуногун барои эҷоди объект мувофиқи эҳтиёҷот (параметрҳои ҳатмӣ ё интихобӣ, эҷоди фабрика ва ғайра).
- Нақлпазирии ният: Истифодаи конструкторҳои номгузошташуда барои тавсифи роҳи махсуси эҷоди объект.
Типҳои асосии конструктор:
-
Конструктори пешфарз (бе ном):
- Барои эҷоди осон объект истифода мешавад.
- Мумкин аст дорои параметрҳои ҳатмӣ ё интихобӣ (номгузошташуда ё ҷойгиршаванда) бошад.
class MyClass { String name; // Конструктори пешфарз MyClass(this.name); } -
Конструктори номгузошташуда:
- Имкон медиҳад, ки чанд роҳ барои эҷоди объект дошта бошад, ҳар кадом бо номи махсуси худ.
- Муфид аст, вақте ки лозим аст, ки объект аз манбаъҳои гуногун ё дар ҳолатҳои гуногун эҷод шавад.
class MyClass { String name; int age; MyClass(this.name, this.age); // Конструктори номгузошташуда MyClass.fromMap(Map<String, dynamic> map) { name = map['name']; age = map['age']; } } -
Конструктори фабрика (factory constructor):
- Ба таври мустақим намунаи нав эҷод намекунад.
- Мумкин аст, ки намунаи мавҷударо, ё намунаи таҳти синфҳои зер, ё намунаи эҷодшуда дар методи фабрика баргардонад.
- Барои татбиқи намунаҳои тарҳрезӣ, кеши объектҳо ё баргардонидани намудҳои зер гуногун истифода мешавад.
class Logger { static final Map<String, Logger> _cache = <String, Logger>{}; // Конструктори фабрика factory Logger(String name) { if (_cache.containsKey(name)) { return _cache[name]!; } else { final logger = Logger._internal(name); // Конструктори хусусӣ _cache[name] = logger; return logger; } } // Конструктори хусусии номгузошташуда барои истифодаи дохилӣ Logger._internal(this.name); final String name; void log(String message) { print('[$name] $message'); } } -
Конструктори доимӣ (const):
- Эҷод мекунад намунаҳои доимии синф.
- Ҳамаи майдонҳои синф бояд
finalбошанд. - Барои эҷоди объектҳои тағйирнопазир дар вақти компиляция истифода мешавад, ки суръатро баланд мебардорад ва имкон медиҳад, ки Dart бештар оптимизатсияҳоро анҷом диҳад.
class Point { final double x; final double y; // Конструктори доимӣ const Point(this.x, this.y); }
Истифодаи намудҳои гуногуни конструкторҳо имкон медиҳад, ки кодро бештар баёнӣ, флексибл ва самаранок созем дар Dart.