Sobes.tech
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 final bo‘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.