Sobes.tech
Junior

Kodėl Dart kalboje naudojami įvairūs konstruktorių tipai?

sobes.tech AI

Atsakymas iš AI

Dart'e naudojami įvairūs konstruktorių tipai:

  • Objektų inicializavimas: Nustatyti pradinius klasės laukų reikšmes jos sukūrimo metu.
  • Lankstumas kurti egzempliorius: Suteikti skirtingus būdus kurti objektą pagal poreikius (privalomi arba pasirinktiniai parametrai, fabrikavimo būdas ir kt.).
  • Ketinimo aiškumas: Naudoti vardinius konstruktorius apibūdinti konkretų objekto kūrimo būdą.

Pagrindiniai konstruktorių tipai:

  • Numatytasis (nevardinis) konstruktorius:

    • Naudojamas paprastam objekto kūrimui.
    • Gali turėti privalomus arba pasirinktinus (vardinius arba pozicinius) parametrus.
    class MyClass {
      String name;
    
      // Numatytasis konstruktorius
      MyClass(this.name); 
    }
    
  • Vardinis konstruktorius:

    • Leidžia turėti kelis būdus kurti objektą, kiekvienas su savo unikaliu pavadinimu.
    • Naudinga, kai reikia sukurti objektą remiantis skirtingais šaltiniais arba skirtingose būsenose.
    class MyClass {
      String name;
      int age;
    
      MyClass(this.name, this.age);
    
      // Vardinis konstruktorius
      MyClass.fromMap(Map<String, dynamic> map) {
        name = map['name'];
        age = map['age'];
      }
    }
    
  • Fabriko (factory) konstruktorius:

    • Tiesiogiai nesukuria naujo klasės egzemplioriaus.
    • Gali grąžinti esamą egzempliorių, pogrupį arba su fabrikiniu metodu sukurtą egzempliorių.
    • Naudojamas projektavimo šablonų įgyvendinimui, objektų talpyklai arba grąžinti įvairius pogrupius.
    class Logger {
      static final Map<String, Logger> _cache = <String, Logger>{};
    
      // Fabriko konstruktorius
      factory Logger(String name) {
        if (_cache.containsKey(name)) {
          return _cache[name]!;
        } else {
          final logger = Logger._internal(name); // Privatūs konstruktorius
          _cache[name] = logger;
          return logger;
        }
      }
    
      // Privatus vardinis konstruktorius vidiniam naudojimui
      Logger._internal(this.name); 
    
      final String name;
    
      void log(String message) {
        print('[$name] $message');
      }
    }
    
  • Pastovus (const) konstruktorius:

    • Kuria pastovius klasės egzempliorius.
    • Visi klasės laukai turi būti final.
    • Naudojamas kuriant nekintamus objektus kompiliacijos metu, tai didina našumą ir leidžia Dart atlikti papildomas optimizacijas.
    class Point {
      final double x;
      final double y;
    
      // Pastovus konstruktorius
      const Point(this.x, this.y); 
    }
    

Naudojant įvairius konstruktorių tipus, galima kurti išraiškingesnį, lankstesnį ir efektyvesnį kodą Dart kalboje.