Menu
Coddy logo textTech

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)); // true

Sowohl 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 Instanz

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

challenge icon

Aufgabe

Einfach

Erstellen 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 eine Difficulty-Klasse, die die Schwierigkeits­einstellungen des Spiels darstellt. Deine Klasse sollte Folgendes enthalten:
    • Drei final-Felder: name (String), enemyCount (int) und playerLives (int)
    • Einen konstanten Konstruktor, der alle drei Felder initialisiert
    • Eine display()-Methode, die die Schwierigkeitsinformationen ausgibt
  • main.dart: Importiere deine Difficulty-Klasse und erstelle drei konstante Schwierigkeitsvoreinstellungen:
    • easy mit dem Namen 'Easy', 5 Gegnern und 5 Leben
    • medium mit dem Namen 'Medium', 10 Gegnern und 3 Leben
    • hard mit dem Namen 'Hard', 20 Gegnern und 1 Leben
    Erstelle alle drei mithilfe des Schlüsselworts const als Konstanten zur Kompilierzeit. Rufe anschließend bei jeder Voreinstellung in der oben aufgeführten Reihenfolge display() auf. Prüfe abschließend mithilfe von const Difficulty('Easy', 5, 5), ob zwei identical()-Objekte identisch sind, und gib das Ergebnis aus.

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

[name]: [enemyCount] enemies, [playerLives] lives

Erwartete Ausgabe:

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

Probier 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
}
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