Menu
Coddy logo textTech

Sovrascrittura di toString()

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 70 di 110.

Quando stampi un oggetto in Dart, potresti vedere qualcosa come Instance of 'Person' - non molto utile. Questo accade perché ogni classe eredita un metodo toString() predefinito da Object che restituisce solo il nome della classe.

Sovrascrivendo toString(), puoi fornire una rappresentazione in stringa significativa dei tuoi oggetti:

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

Senza la sovrascrittura, print(person) produrrebbe Instance of 'Person'. In questo modo, ottieni informazioni utili sullo stato dell'oggetto.

Il metodo toString() viene chiamato automaticamente ogni volta che Dart deve convertire il tuo oggetto in una stringa: nelle istruzioni print(), nell’interpolazione di stringhe o quando lo concateni con altre stringhe:

var message = 'User: $person';  // toString() chiamato automaticamente
print('Found: ' + person.toString());  // Chiamata esplicita

Un'implementazione efficace di toString() rende il debug molto più semplice, permettendoti di ispezionare rapidamente i valori degli oggetti durante lo sviluppo.

challenge icon

Sfida

Facile

Costruiamo un sistema di catalogo prodotti in cui ogni prodotto mostra le proprie informazioni in un formato chiaro e leggibile quando viene stampato. Ti eserciterai a sovrascrivere il metodo toString() per rendere i tuoi oggetti più facili da analizzare e più intuitivi da usare.

Organizzerai il codice in due file:

  • product.dart: crea una classe Product che rappresenta un articolo di un negozio. Il prodotto deve avere un name (String), un price (double) e una quantity (int). Sovrascrivi il metodo toString() affinché restituisca una stringa formattata esattamente in questo formato: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: importa il file del prodotto e mostra come la sovrascrittura di toString() renda molto più utile stampare gli oggetti. Crea tre prodotti e stampali per vedere in azione la tua rappresentazione personalizzata come stringa:
    • Un prodotto chiamato 'Laptop' con prezzo 999.99 e quantità 5
    • Un prodotto chiamato 'Mouse' con prezzo 29.5 e quantità 50
    • Un prodotto chiamato 'Keyboard' con prezzo 75.0 e quantità 30
    Mostra anche l'interpolazione di stringhe stampando un messaggio che include uno dei tuoi prodotti: Featured: [product] usando il prodotto Laptop.

Nota come stampare direttamente ciascun prodotto mostri informazioni significative invece del messaggio poco utile Instance of 'Product'. Il tuo metodo toString() viene chiamato automaticamente sia nelle istruzioni print() sia quando usi l'interpolazione di stringhe.

Output previsto:

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)

Provalo tu

import 'product.dart';

void main() {
  // TODO: Crea tre istanze di Product:
  // 1. Laptop - prezzo: 999.99, quantità: 5
  // 2. Mouse - prezzo: 29.5, quantità: 50
  // 3. Keyboard - prezzo: 75.0, quantità: 30

  // TODO: Stampa ogni prodotto (toString() verrà chiamato automaticamente)

  // TODO: Stampa un messaggio in evidenza usando l'interpolazione delle stringhe
  // Formato: Featured: [prodotto laptop]
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online