Junior
Kāpēc Dart valodā tiek izmantoti dažādi konstruktoru tipi?
sobes.tech AI
Atbilde no AI
Dartā tiek izmantoti dažādi konstruktoru veidi:
- Objektu inicializācija: Iestatīt klases lauku sākotnējās vērtības tās izveides laikā.
- Elastība instanču veidošanā: Nodrošināt dažādus veidus, kā izveidot objektu atbilstoši vajadzībām (obligāti vai izvēles parametri, rūpnīcas veidošana utt.).
- Naimošanas skaidrība: Izmantot nosaukto konstruktoru, lai aprakstītu konkrētu objekta izveides veidu.
Galvenie konstruktoru tipi:
-
Noklusējuma (bez nosaukuma) konstruktoru:
- Izmanto vienkāršai objekta izveidei.
- Var saturēt obligātus vai izvēles (nosaukuma vai pozicionālus) parametrus.
class MyClass { String name; // Noklusējuma konstruktoru MyClass(this.name); } -
Nosauktais konstruktoru:
- Atļauj būt vairākām objekta izveides metodēm, katrai ar savu unikālo nosaukumu.
- Noder, ja nepieciešams izveidot objektu no dažādiem avotiem vai dažādos stāvokļos.
class MyClass { String name; int age; MyClass(this.name, this.age); // Nosauktais konstruktoru MyClass.fromMap(Map<String, dynamic> map) { name = map['name']; age = map['age']; } } -
Rūpnīcas (factory) konstruktoru:
- Tieši neveido jaunu klases piemēru.
- Var atgriezt esošu piemēru, apakšklasi vai piemēru, kas izveidots rūpnīcas metodē.
- Izmanto dizaina modeļu, objektu kešatmiņas vai dažādu apakštipu atgriešanai.
class Logger { static final Map<String, Logger> _cache = <String, Logger>{}; // Rūpnīcas konstruktoru factory Logger(String name) { if (_cache.containsKey(name)) { return _cache[name]!; } else { final logger = Logger._internal(name); // Privāts konstruktoru _cache[name] = logger; return logger; } } // Privāts nosauktais konstruktoru iekšējai lietošanai Logger._internal(this.name); final String name; void log(String message) { print('[$name] $message'); } } -
Pastāvīgs (const) konstruktoru:
- Izveido pastāvīgus klases piemērus.
- Visām klases laukiem jābūt
final. - Izmanto nemaināmu objektu izveidei kompilācijas laikā, kas palielina veiktspēju un ļauj Dart veikt papildu optimizācijas.
class Point { final double x; final double y; // Pastāvīgs konstruktoru const Point(this.x, this.y); }
Dažādu konstruktoru tipu izmantošana ļauj izveidot izteiksmīgāku, elastīgāku un efektīvāku kodu Dart valodā.