Konstantenkonstruktoren
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 13 von 110.
Ein Konstantenkonstruktor erstellt zur Kompilierzeit konstante Objekte. Wenn du Objekte mit denselben Werten mithilfe eines const-Konstruktors erstellst, verwendet Dart dieselbe Instanz im Speicher wieder, wodurch die Leistung verbessert wird.
Um einen konstanten Konstruktor zu erstellen, füge das Schlüsselwort const vor dem Namen des Konstruktors hinzu und stelle sicher, dass alle Instanzvariablen final sind:
class Color {
final int red;
final int green;
final int blue;
const Color(this.red, this.green, this.blue);
}
const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);
print(identical(white, alsoWhite)); // trueSowohl white als auch alsoWhite verweisen auf exakt dasselbe Objekt im Speicher, da sie mit identischen Werten unter Verwendung eines konstanten Konstruktors erstellt wurden.
Du kannst const-Konstruktoren auch ohne das Schlüsselwort const verwenden, wodurch reguläre (nicht konstante) Instanzen erstellt werden:
var red = Color(255, 0, 0); // Reguläre Instanz
const blue = Color(0, 0, 255); // Konstante InstanzKonstante Konstruktoren werden häufig für unveränderliche Konfigurationsobjekte, vordefinierte Werte wie Farben oder Größen und überall dort verwendet, wo Sie die Unveränderlichkeit von Objekten garantieren und gleichzeitig die Speichernutzung optimieren möchten.
Aufgabe
EinfachErstellen wir ein Konfigurationssystem für ein einfaches Spiel, das konstante Konstruktoren verwendet, um unveränderliche, wiederverwendbare Einstellungen zu definieren.
Du erstellst zwei Dateien, um deinen Code zu organisieren:
difficulty.dart: Definiere eineDifficulty-Klasse, die die Schwierigkeitseinstellungen des Spiels darstellt. Deine Klasse sollte Folgendes enthalten:- Drei
final-Felder:name(String),enemyCount(int) undplayerLives(int) - Einen konstanten Konstruktor, der alle drei Felder initialisiert
- Eine
display()-Methode, die die Schwierigkeitsinformationen ausgibt
- Drei
main.dart: Importiere deine Difficulty-Klasse und erstelle drei konstante Schwierigkeitsvoreinstellungen:easymit dem Namen'Easy',5Gegnern und5Lebenmediummit dem Namen'Medium',10Gegnern und3Lebenhardmit dem Namen'Hard',20Gegnern und1Leben
constals Konstanten zur Kompilierzeit. Rufe anschließend bei jeder Voreinstellung in der oben aufgeführten Reihenfolgedisplay()auf. Prüfe abschließend mithilfe vonconst Difficulty('Easy', 5, 5), ob zweiidentical()-Objekte identisch sind, und gib das Ergebnis aus.
Die display()-Methode sollte in genau diesem Format ausgeben:
[name]: [enemyCount] enemies, [playerLives] livesErwartete Ausgabe:
Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
trueProbier es selbst
import 'difficulty.dart';
void main() {
// TODO: Erstelle drei konstante Schwierigkeitsvoreinstellungen unter Verwendung des const-Keywords:
// - easy: name 'Easy', 5 enemies, 5 lives
// - medium: name 'Medium', 10 enemies, 3 lives
// - hard: Name 'Hard', 20 Gegner, 1 Leben
// TODO: Rufe display() für jede Schwierigkeitsstufe in der Reihenfolge easy, medium, hard auf
// TODO: Überprüfe, ob zwei const Difficulty('Easy', 5, 5) Objekte identisch sind
// unter Verwendung von identical() und gib das Ergebnis aus
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort thisMethodenInstanzvariablenGrundlagen von KonstruktorenRückblick – Einfacher Taschenrechner4Null-Sicherheit
Einführung in die Null-SicherheitNullable vs. Non-NullableDie Operatoren ? und !Late-Schlüsselwort und Null-SicherheitNull-bewusste OperatorenNull-Sicherheit in KlassenRückblick – Benutzers профilsystem7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrere InterfacesZusammenfassung – Formrechner10Collections & Generics
Übersicht über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische EinschränkungenIterable & IteratorRückblick – Generischer Speicher13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungErweiterungsmethodenAufrufbare KlassenVersiegelte Klassen (Dart 3)Records (Dart 3)Muster & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
StandardkonstruktorBenannte KonstruktorenInitialisierungslistenKonstantenkonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenRückblick – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _-Präfix-KonventionBibliotheksweite SichtbarkeitTiefergehende Getter & SetterInformationsverbergungRückblick – Studierendendaten8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas Schlüsselwort „on“ in MixinsMixin vs. VererbungMixin vs. SchnittstelleRückblick – Tiersystem11Spezielle Methoden
toString()-ÜberschreibunghashCode- & ==-ÜberschreibungComparable-Schnittstellecall()-MethodenoSuchMethod-ÜberschreibungWiederholung – Benutzerdefinierte Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFabrikmusterBeobachtermusterStrategiemuster17Abschließende Herausforderungen
E-Learning-PlattformBankingsystemSpielcharaktersystemFahrzeugvermietung3Klassen-Eigenschaften
Instanz- vs. statische MemberFinal- und Const-FelderLate-VariablenStatische Methoden und FelderGetter und SetterRückblick – Bankkontoverwaltung6Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungDie Annotation @overrideDas Schlüsselwort final für KlassenKonstruktoren und VererbungZusammenfassung – Mitarbeiterhierarchie9Polymorphismus
Grundlagen des PolymorphismusPolymorphismus über InterfacesLaufzeit-TypüberprüfungDie Operatoren is & asCovariant-SchlüsselwortZusammenfassung – ZahlungsprozessorÜbe selbstständig: Online-Dart-Compiler