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.