Menu
Coddy logo textTech

toString() überschreiben

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

Wenn Sie ein Objekt in Dart ausgeben, sehen Sie möglicherweise so etwas wie Instance of 'Person' – nicht sehr 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, 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

Lassen Sie uns ein Produktkatalog-System erstellen, bei dem jedes Produkt seine Informationen in einem sauberen, lesbaren Format anzeigt, wenn es ausgegeben wird. Sie werden üben, die Methode toString() zu überschreiben, um Ihre Objekte besser debuggbar und benutzerfreundlicher zu machen.

Sie werden Ihren Code in zwei Dateien organisieren:

  • product.dart: Erstellen Sie eine Klasse Product, die einen Artikel in einem Geschäft darstellt. Ihr Produkt sollte einen name (String), einen price (double) und eine quantity (int) haben. Überschreiben Sie die Methode toString(), um einen formatierten String in genau diesem Format zurückzugeben: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: Importieren Sie Ihre Produktdatei und demonstrieren Sie, wie das Überschreiben von toString() das Ausgeben von Objekten viel nützlicher macht. Erstellen Sie drei Produkte und geben Sie diese aus, um Ihre benutzerdefinierte String-Reprä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
    Demonstrieren Sie außerdem die String-Interpolation, indem Sie eine Nachricht ausgeben, die eines Ihrer Produkte enthält: Featured: [product] unter Verwendung des Laptop-Produkts.

Beachten Sie, wie das direkte Ausgeben jedes Produkts aussagekräftige Informationen anstelle der wenig hilfreichen Nachricht Instance of 'Product' anzeigt. Ihre toString()-Methode wird automatisch aufgerufen, sowohl in print()-Anweisungen als auch bei der Verwendung von String-Interpolation.

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)

Spickzettel

Standardmäßig zeigt das Drucken eines Objekts in Dart Instance of 'ClassName'. Überschreiben Sie die toString()-Methode, um aussagekräftige String-Repräsentationen bereitzustellen:

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

Die toString()-Methode wird automatisch in print()-Anweisungen und bei der String-Interpolation aufgerufen:

var person = Person('Alice', 30);
print(person);  // Person(name: Alice, age: 30)
var message = 'User: $person';  // toString() wird automatisch aufgerufen

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