Sobes.tech
Junior

Dart dilində müxtəlif növ konstruktorlar nə üçün istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Dart-da, müxtəlif növ konstruktorlar aşağıdakılar üçün istifadə olunur:

  • Obyektlərin başlanğıc vəziyyətə gətirilməsi: Sinifin sahələrinin başlanğıc dəyərlərini qurarkən.
  • İstifadə üçün çevikliyi: Ehtiyaclara uyğun olaraq obyektin yaradılmasının müxtəlif yollarını təmin etmək (mütləq və ya könüllü parametrlər, fabrik vasitəsilə yaradılma və s.).
  • Niyyətin aydınlığı: Müəyyən bir obyekt yaradılma üsulunu təsvir etmək üçün adlandırılmış konstruktorlardan istifadə etmək.

Əsas konstruktor növləri:

  • Varsayılan konstruktor (adlandırılmamış konstruktor):

    • Sadə obyekt yaratmaq üçün istifadə olunur.
    • Mütləq və ya könüllü (adlandırılmış və ya mövqeli) parametrlərə sahib ola bilər.
    class MyClass {
      String name;
    
      // Varsayılan konstruktor
      MyClass(this.name); 
    }
    
  • Adlandırılmış konstruktor:

    • Bir neçə obyekt yaratma üsuluna malik olmaq imkanı verir, hər biri özünəməxsus adı ilə.
    • Müxtəlif mənbələrdən və ya müxtəlif vəziyyətlərdə obyekt yaratmaq lazım olduqda faydalıdır.
    class MyClass {
      String name;
      int age;
    
      MyClass(this.name, this.age);
    
      // Adlandırılmış konstruktor
      MyClass.fromMap(Map<String, dynamic> map) {
        name = map['name'];
        age = map['age'];
      }
    }
    
  • Fabrika konstruktoru:

    • Birbaşa yeni nümunə yaratmır.
    • Mövcud nümunəni, alt sinfi və ya fabrik metodunda yaradılmış nümunəni qaytara bilər.
    • Dizayn nümunələrinin, obyektlərin keşi və ya müxtəlif alt tiplərin qaytarılması üçün istifadə olunur.
    class Logger {
      static final Map<String, Logger> _cache = <String, Logger>{};
    
      // Fabrika konstruktoru
      factory Logger(String name) {
        if (_cache.containsKey(name)) {
          return _cache[name]!;
        } else {
          final logger = Logger._internal(name); // Özəl konstruktoru çağırır
          _cache[name] = logger;
          return logger;
        }
      }
    
      // Daxili istifadə üçün özəl adlandırılmış konstruktor
      Logger._internal(this.name); 
    
      final String name;
    
      void log(String message) {
        print('[$name] $message');
      }
    }
    
  • Sabit konstruktor:

    • Sabit nümunələr yaradır.
    • Bütün sahələr final olmalıdır.
    • Kompilyasiya zamanı dəyişməz obyektlər yaratmaq üçün istifadə olunur, bu performansı artırır və Dart-ın daha çox optimallaşdırma etməsinə imkan verir.
    class Point {
      final double x;
      final double y;
    
      // Sabit konstruktor
      const Point(this.x, this.y); 
    }
    

Fərqli konstruktor tiplərinin istifadəsi Dart-da daha ifadəli, çevik və səmərəli kod yaratmağa imkan verir.