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.