Menu
Coddy logo textTech

Konstante Konstruktoren

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 13 von 110.

Ein konstanter Konstruktor erzeugt zur Kompilierzeit konstante Objekte. Wenn Sie Objekte mit denselben Werten unter Verwendung eines const-Konstruktors erstellen, verwendet Dart dieselbe Instanz im Speicher wieder, was die Performance verbessert.

Um einen konstanten Konstruktor zu erstellen, fügen Sie das Schlüsselwort const vor dem Konstruktornamen hinzu und stellen Sie 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 zeigen auf genau dasselbe Objekt im Speicher, da sie mit identischen Werten unter Verwendung eines const-Konstruktors erstellt wurden.

Sie können 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

Lassen Sie uns ein Konfigurationssystem für ein einfaches Spiel erstellen, das konstante Konstruktoren verwendet, um unveränderliche, wiederverwendbare Einstellungen zu definieren.

Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:

  • difficulty.dart: Definieren Sie eine Klasse Difficulty, die die Schwierigkeitseinstellungen des Spiels repräsentiert. Ihre Klasse sollte Folgendes haben:
    • Drei final Felder: name (String), enemyCount (int) und playerLives (int)
    • Einen konstanten Konstruktor, der alle drei Felder initialisiert
    • Eine Methode display(), die die Informationen zur Schwierigkeit ausgibt
  • main.dart: Importieren Sie Ihre Difficulty-Klasse und erstellen Sie drei konstante Schwierigkeits-Voreinstellungen:
    • easy mit dem Namen 'Easy', 5 Feinden und 5 Leben
    • medium mit dem Namen 'Medium', 10 Feinden und 3 Leben
    • hard mit dem Namen 'Hard', 20 Feinden und 1 Leben
    Erstellen Sie alle drei als Kompilierzeit-Konstanten unter Verwendung des Schlüsselworts const. Rufen Sie dann display() für jede in der oben aufgeführten Reihenfolge auf. Überprüfen Sie schließlich mit identical(), ob zwei const Difficulty('Easy', 5, 5) Objekte identisch sind, und geben Sie das Ergebnis aus.

Die Methode display() sollte in genau diesem Format drucken:

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

Erwartete Ausgabe:

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

Spickzettel

Ein konstanter Konstruktor erstellt zur Kompilierzeit konstante Objekte. Wenn Objekte mit identischen Werten unter Verwendung eines const-Konstruktors erstellt werden, verwendet Dart dieselbe Instanz im Speicher wieder.

Um einen konstanten Konstruktor zu erstellen, fügen Sie das Schlüsselwort const vor dem Konstruktornamen hinzu und stellen Sie 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);
}

Das Erstellen konstanter Instanzen mit identischen Werten führt zum selben Objekt im Speicher:

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

Const-Konstruktoren können auch ohne das Schlüsselwort const verwendet werden, um reguläre Instanzen zu erstellen:

var red = Color(255, 0, 0);       // Reguläre Instanz
const blue = Color(0, 0, 255);    // Konstante Instanz

Konstante Konstruktoren sind nützlich für unveränderliche Konfigurationsobjekte, vordefinierte Werte und die Optimierung der Speichernutzung.

Probier es selbst

import 'difficulty.dart';

void main() {
  // TODO: Erstelle drei konstante Schwierigkeitsvoreinstellungen unter Verwendung des const-Keywords:
  // - easy: Name 'Easy', 5 Gegner, 5 Leben
  // - medium: Name 'Medium', 10 Gegner, 3 Leben
  // - 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