Sobes.tech
Junior

Miks Dart keeles kasutatakse erinevat tüüpi konstruktorid?

sobes.tech AI

Vastus AI-lt

Dart kasutab erinevaid konstruktoritüüpe:

  • Objektide algväärtustamine: Klassiväljade algväärtuste seadmine nende loomise ajal.
  • Paindlikkus eksemplaride loomisel: Erinevate viiside pakkumine objekti loomiseks vastavalt vajadustele (kohustuslikud või valikulised parameetrid, tehases loomine jne).
  • Eesmärgi selgus: Kasutada nimetatud konstruktorit, et kirjeldada konkreetset objekti loomise viisi.

Peamised konstruktoritüübid:

  • Vaikimisi (nimetu) konstruktor:

    • Kasutatakse objekti lihtsaks loomiseks.
    • Võib sisaldada kohustuslikke või valikulisi (nimelisi või positsioonilisi) parameetreid.
    class MyClass {
      String name;
    
      // Vaikimisi konstruktor
      MyClass(this.name); 
    }
    
  • Nimetatud konstruktor:

    • Annab võimaluse omada mitut objekti loomise viisi, igaüks oma unikaalse nimega.
    • Kasulik, kui on vaja luua objekt erinevatest allikatest või erinevates olekutes.
    class MyClass {
      String name;
      int age;
    
      MyClass(this.name, this.age);
    
      // Nimetatud konstruktor
      MyClass.fromMap(Map<String, dynamic> map) {
        name = map['name'];
        age = map['age'];
      }
    }
    
  • Tehase (factory) konstruktor:

    • Ei loo otse uut klassi eksemplari.
    • Võib tagastada olemasoleva eksemplari, alamklass või tehases meetodil loodud eksemplari.
    • Kasutatakse disainimustrite rakendamiseks, objektide vahemälu haldamiseks või erinevate alamklasside tagastamiseks.
    class Logger {
      static final Map<String, Logger> _cache = <String, Logger>{};
    
      // Tehase konstruktor
      factory Logger(String name) {
        if (_cache.containsKey(name)) {
          return _cache[name]!;
        } else {
          final logger = Logger._internal(name); // Privaatne konstruktor
          _cache[name] = logger;
          return logger;
        }
      }
    
      // Privaatne nimeline konstruktor sisekasutuseks
      Logger._internal(this.name); 
    
      final String name;
    
      void log(String message) {
        print('[$name] $message');
      }
    }
    
  • Püsiv (const) konstruktor:

    • Loob püsivad eksemplarid klassist.
    • Kõik klassi väljad peavad olema final.
    • Kasutatakse muutumatute objektide loomisel kompileerimise ajal, mis suurendab jõudlust ja võimaldab Dartil teha täiendavaid optimeerimisi.
    class Point {
      final double x;
      final double y;
    
      // Püsiv konstruktor
      const Point(this.x, this.y); 
    }
    

Konkreetsete konstruktoritüüpide kasutamine võimaldab kirjutada väljendusrikkamat, paindlikumat ja tõhusamat koodi Dartis.