Menu
Coddy logo textTech

Nadpisanie toString()

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 70 z 110.

Gdy wyświetlasz obiekt w Dart, możesz zobaczyć coś w rodzaju Instance of 'Person' — niezbyt pomocnego. Dzieje się tak, ponieważ każda klasa dziedziczy domyślną metodę toString() z klasy Object, która zwraca tylko nazwę klasy.

Nadpisując toString(), możesz zapewnić czytelną tekstową reprezentację swoich obiektów:

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

Bez nadpisania print(person) wyświetliłoby Instance of 'Person'. Dzięki temu uzyskujesz przydatne informacje o stanie obiektu.

Metoda toString() jest wywoływana automatycznie zawsze, gdy Dart musi przekonwertować Twój obiekt na ciąg znaków — w instrukcjach print(), interpolacji ciągów znaków lub podczas łączenia z innymi ciągami znaków:

var message = 'User: $person';  // toString() wywoływana automatycznie
print('Found: ' + person.toString());  // Jawne wywołanie

Dobrze zaimplementowana metoda toString() znacznie ułatwia debugowanie, ponieważ pozwala szybko sprawdzać wartości obiektów podczas programowania.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system katalogu produktów, w którym każdy produkt po wydrukowaniu wyświetla swoje informacje w przejrzystym, czytelnym formacie. Poćwiczysz nadpisywanie metody toString(), aby obiekty były łatwiejsze do debugowania i bardziej przyjazne dla użytkownika.

Podzielisz swój kod na dwa pliki:

  • product.dart: Utwórz klasę Product, która reprezentuje produkt w sklepie. Twój produkt powinien mieć name (String), price (double) i quantity (int). Nadpisz metodę toString(), aby zwracała sformatowany ciąg znaków dokładnie w tym formacie: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: Zaimportuj plik produktu i pokaż, jak nadpisanie metody toString() sprawia, że drukowanie obiektów jest znacznie bardziej przydatne. Utwórz trzy produkty i wydrukuj je, aby zobaczyć w działaniu własną reprezentację tekstową:
    • Produkt o nazwie 'Laptop', cenie 999.99 i ilości 5
    • Produkt o nazwie 'Mouse', cenie 29.5 i ilości 50
    • Produkt o nazwie 'Keyboard', cenie 75.0 i ilości 30
    Pokaż też interpolację ciągów znaków, drukując komunikat zawierający jeden z Twoich produktów: Featured: [product], używając produktu Laptop.

Zwróć uwagę, że bezpośrednie wydrukowanie każdego produktu wyświetla przydatne informacje zamiast mało pomocnego komunikatu Instance of 'Product'. Metoda toString() jest wywoływana automatycznie zarówno w instrukcjach print(), jak i podczas interpolacji ciągów znaków.

Oczekiwany wynik:

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)

Spróbuj swoich sił

import 'product.dart';

void main() {
  // TODO: Utwórz trzy instancje Product:
  // 1. Laptop - cena: 999.99, ilość: 5
  // 2. Mouse - cena: 29.5, ilość: 50
  // 3. Keyboard - cena: 75.0, ilość: 30

  // TODO: Wypisz każdy produkt (toString() zostanie wywołane automatycznie)

  // TODO: Wypisz komunikat o wyróżnionym produkcie, używając interpolacji ciągów znaków
  // Format: Featured: [produkt laptop]
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Dart online