Menu
Coddy logo textTech

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.53975

Die 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.0

Hier werden width und height per Kurzschreibweise zugewiesen, während area in der Initialisierungsliste unter Verwendung dieser Werte berechnet wird.

challenge icon

Aufgabe

Einfach

Erstelle einen Box-Maßrechner, der Initialisierungslisten verwendet, um abgeleitete Werte zu berechnen, wenn Objekte erstellt werden.

Organisiere deinen Code in zwei Dateien:

  • box.dart: Definiere eine Box-Klasse, die eine 3D-Box mit Abmessungen und automatisch berechneten Eigenschaften darstellt. Deine Klasse sollte Folgendes enthalten:
    • Drei final double-Felder: length, width und height
    • Zwei berechnete final double-Felder: volume und surfaceArea
    • Einen Konstruktor, der length, width und height mithilfe der Kurzschreibweise this. übernimmt und eine Initialisierungsliste verwendet, um volume (length × width × height) und surfaceArea (2 × (length×width + width×height + height×length)) zu berechnen
    • Eine display()-Methode, die die Informationen zur Box ausgibt
  • main.dart: Importiere deine Box-Klasse und erstelle zwei Boxen:
    • Eine Box mit den Abmessungen 3.0, 4.0, 5.0
    • Eine Box mit den Abmessungen 2.0, 2.0, 2.0
    Rufe für jede Box display() in der aufgeführten Reihenfolge auf.

Die display()-Methode sollte in diesem exakten Format ausgeben:

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.0

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
  
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Dart-Compiler