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) конструктор:

    • Түздөн-түз жаңы экземпляр түзбөйт.
    • Бар экземплярды, подкласс же фабрика аркылуу түзүлгөн экземплярды кайтарса болот.
    • Проектирлөө үлгүлөрүн, объекттерди кэшдөө же ар башка подкласс түрлөрүн кайтаруу үчүн колдонулат.
    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та көбүрөөк түшүнүктүү, ийкемдүү жана натыйжалуу код түзүүгө мүмкүндүк берет.