Sobes.tech
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.