Menu
Coddy logo textTech

toString()-Überschreibung

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

Wenn du ein Objekt in Dart ausgibst, siehst du möglicherweise so etwas wie Instance of 'Person' – nicht besonders hilfreich. Dies geschieht, weil jede Klasse eine standardmäßige toString()-Methode von Object erbt, die nur den Klassennamen zurückgibt.

Durch das Überschreiben von toString() können Sie eine aussagekräftige String-Repräsentation Ihrer Objekte bereitstellen:

class Person {
  String name;
  int age;
  
  Person(this.name, this.age);
  
  @override
  String toString() {
    return 'Person(name: $name, age: $age)';
  }
}

void main() {
  var person = Person('Alice', 30);
  print(person);  // Person(name: Alice, age: 30)
}

Ohne das Überschreiben würde print(person) Instance of 'Person' ausgeben. Damit erhalten Sie nützliche Informationen über den Zustand des Objekts.

Die Methode toString() wird automatisch aufgerufen, wann immer Dart dein Objekt in einen String umwandeln muss – in print()-Anweisungen, bei der String-Interpolation oder beim Verknüpfen mit anderen Strings:

var message = 'User: $person';  // toString() wird automatisch aufgerufen
print('Found: ' + person.toString());  // Expliziter Aufruf

Ein gut implementiertes toString() macht das Debugging viel einfacher, indem es Ihnen ermöglicht, Objektwerte während der Entwicklung schnell zu inspizieren.

challenge icon

Aufgabe

Einfach

Lass uns ein Produktkatalogsystem erstellen, bei dem jedes Produkt beim Ausgeben seine Informationen in einem übersichtlichen, gut lesbaren Format anzeigt. Du übst, die Methode toString() zu überschreiben, damit deine Objekte leichter zu debuggen und benutzerfreundlicher sind.

Du organisierst deinen Code in zwei Dateien:

  • product.dart: Erstelle eine Product-Klasse, die einen Artikel in einem Geschäft darstellt. Dein Produkt sollte einen name (String), einen price (double) und eine quantity (int) haben. Überschreibe die Methode toString(), sodass sie eine formatierte Zeichenkette in genau diesem Format zurückgibt: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: Importiere deine Produktdatei und zeige, wie das Überschreiben von toString() das Ausgeben von Objekten wesentlich nützlicher macht. Erstelle drei Produkte und gib sie aus, um deine benutzerdefinierte Zeichenkettenrepräsentation in Aktion zu sehen:
    • Ein Produkt namens 'Laptop' mit dem Preis 999.99 und der Menge 5
    • Ein Produkt namens 'Mouse' mit dem Preis 29.5 und der Menge 50
    • Ein Produkt namens 'Keyboard' mit dem Preis 75.0 und der Menge 30
    Zeige außerdem die Zeichenketteninterpolation, indem du eine Nachricht ausgibst, die eines deiner Produkte enthält: Featured: [product], wobei du das Laptop-Produkt verwendest.

Beachte, wie das direkte Ausgeben jedes Produkts aussagekräftige Informationen anzeigt, anstatt der wenig hilfreichen Meldung Instance of 'Product'. Deine Methode toString() wird sowohl in print()-Anweisungen als auch bei der Verwendung von Zeichenketteninterpolation automatisch aufgerufen.

Erwartete Ausgabe:

Product(name: Laptop, price: $999.99, qty: 5)
Product(name: Mouse, price: $29.5, qty: 50)
Product(name: Keyboard, price: $75.0, qty: 30)
Featured: Product(name: Laptop, price: $999.99, qty: 5)

Probier es selbst

import 'product.dart';

void main() {
  // TODO: Erstelle drei Product-Instanzen:
  // 1. Laptop - price: 999.99, quantity: 5
  // 2. Mouse - price: 29.5, quantity: 50
  // 3. Keyboard - price: 75.0, quantity: 30

  // TODO: Gib jedes Produkt aus (toString() wird automatisch aufgerufen)

  // TODO: Gib eine hervorgehobene Nachricht mittels string interpolation aus
  // Format: Featured: [laptop product]
}
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