Initialisierungslisten
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 12 von 110.
Eine Initialisierungsliste ist der Code, der nach einem Doppelpunkt in einem Konstruktor und vor dem Konstruktorrumpf erscheint. Sie wird ausgeführt, bevor der Konstruktorrumpf ausgeführt wird, und wird verwendet, um Instanzvariablen zu initialisieren.
Du hast Initialisierungslisten bereits in früheren Lektionen gesehen:
Point.origin() : x = 0, y = 0;Der Teil nach dem Doppelpunkt (x = 0, y = 0) ist die Initialisierungsliste. Mehrere Initialisierungen werden durch Kommas getrennt.
Initialisierungslisten sind essenziell bei der Arbeit mit final-Variablen, die gesetzt werden müssen, bevor der Konstruktor-Rumpf ausgeführt wird:
class Circle {
final double radius;
final double area;
Circle(double r)
: radius = r,
area = 3.14159 * r * r;
}
Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area); // 78.53975Die Initialisierungsliste kann auch Berechnungen oder Transformationen an Konstruktorparametern durchführen, bevor diese zugewiesen werden. Dies ist nützlich, wenn Sie Werte ableiten oder Daten während der Objekterstellung validieren müssen.
Sie können die Kurzschreibweise this. mit einer Initialisierungsliste kombinieren:
class Rectangle {
final double width;
final double height;
final double area;
Rectangle(this.width, this.height)
: area = width * height;
}
Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0Hier werden width und height per Kurzschreibweise zugewiesen, während area in der Initialisierungsliste unter Verwendung dieser Werte berechnet wird.
Aufgabe
EinfachLassen Sie uns einen Rechner für Box-Dimensionen erstellen, der Initialisierungslisten verwendet, um abgeleitete Werte zu berechnen, wenn Objekte erstellt werden.
Sie werden Ihren Code in zwei Dateien organisieren:
box.dart: Definieren Sie eine KlasseBox, die eine 3D-Box mit Dimensionen und automatisch berechneten Eigenschaften darstellt. Ihre Klasse sollte Folgendes haben:- Drei
final doubleFelder:length,widthundheight - Zwei berechnete
final doubleFelder:volumeundsurfaceArea - Einen Konstruktor, der
length,widthundheightunter Verwendung derthis.Kurzschreibweise entgegennimmt und eine Initialisierungsliste verwendet, umvolume(length × width × height) undsurfaceArea(2 × (length×width + width×height + height×length)) zu berechnen - Eine
display()Methode, welche die Informationen der Box ausgibt
- Drei
main.dart: Importieren Sie Ihre Box-Klasse und erstellen Sie zwei Boxen:- Eine Box mit den Dimensionen
3.0,4.0,5.0 - Eine Box mit den Dimensionen
2.0,2.0,2.0
display()für jede Box in der aufgeführten Reihenfolge auf.- Eine Box mit den Dimensionen
Die Methode display() sollte in genau diesem Format drucken:
Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]Erwartete Ausgabe:
Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0Spickzettel
Eine Initialisierungsliste ist Code, der nach einem Doppelpunkt in einem Konstruktor und vor dem Konstruktor-Rumpf erscheint. Sie wird ausgeführt, bevor der Konstruktor-Rumpf ausgeführt wird, und dient dazu, Instanzvariablen zu initialisieren.
Grundlegende Syntax mit mehreren Initialisierungen, die durch Kommas getrennt sind:
Point.origin() : x = 0, y = 0;Initialisierungslisten sind für final-Variablen unerlässlich, da diese gesetzt werden müssen, bevor der Konstruktor-Rumpf ausgeführt wird:
class Circle {
final double radius;
final double area;
Circle(double r)
: radius = r,
area = 3.14159 * r * r;
}Sie können die this.-Kurzschreibweise mit einer Initialisierungsliste kombinieren, um einige Felder direkt zuzuweisen und andere zu berechnen:
class Rectangle {
final double width;
final double height;
final double area;
Rectangle(this.width, this.height)
: area = width * height;
}Die Initialisierungsliste kann Berechnungen oder Transformationen an Konstruktorparametern durchführen, bevor diese zugewiesen werden, was nützlich ist, um Werte während der Objekterstellung abzuleiten.
Probier es selbst
import 'box.dart';
void main() {
// TODO: Erstelle eine Box mit den Maßen 3.0, 4.0, 5.0
// TODO: Erstelle eine Box mit den Maßen 2.0, 2.0, 2.0
// TODO: Rufe display() für jede Box der Reihe nach auf
}
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 this-SchlüsselwortMethodenInstanzvariablenKonstruktor-GrundlagenWiederholung – Einfacher Taschenrechner4Null-Sicherheit
Einführung in Null-SicherheitNullable vs. Non-NullableDie ? und ! OperatorenLate-Schlüsselwort & Null-SicherheitNull-aware OperatorenNull-Sicherheit in KlassenZusammenfassung – Benutzerprofil-System7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrfache InterfacesRückblick – Shape Calculator10Collections & Generics
Überblick über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische ConstraintsIterable & IteratorZusammenfassung – Generische Speicherung13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungExtension MethodsCallable ClassesSealed Classes (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
Standard-KonstruktorBenannte KonstruktorenInitialisierungslistenKonstante KonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenZusammenfassung – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _ Präfix-KonventionSichtbarkeit auf Library-EbeneGetter & Setter im DetailInformation HidingRückblick – Schülerdatensätze8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas on-Schlüsselwort in MixinsMixin vs. VererbungMixin vs. InterfaceZusammenfassung - Tiersystem11Spezielle Methoden
toString() überschreibenhashCode & == überschreibenComparable-Interfacecall()-MethodenoSuchMethod überschreibenZusammenfassung – Eigene Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster3Klasseneigenschaften
Instanz- vs. statische MemberFinal & Const FelderLate-VariablenStatische Methoden & FelderGetter und SetterZusammenfassung – Bankkonto-Manager6Vererbung
Grundlagen der VererbungDas super-SchlüsselwortMethoden überschreibenDie @override-AnnotationDas final-Klassen-SchlüsselwortKonstruktoren & VererbungRückblick – Mitarbeiter-Hierarchie9Polymorphismus
Polymorphismus-GrundlagenPolymorphismus über InterfacesTypprüfung zur LaufzeitDie is & as OperatorenDas covariant SchlüsselwortZusammenfassung – Payment Processor