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 esplicitaUn'implementazione efficace di toString() rende il debug molto più semplice, permettendoti di ispezionare rapidamente i valori degli oggetti durante lo sviluppo.
Sfida
FacileCostruiamo 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 classeProductche rappresenta un articolo di un negozio. Il prodotto deve avere unname(String), unprice(double) e unaquantity(int). Sovrascrivi il metodotoString()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 ditoString()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 prezzo999.99e quantità5 - Un prodotto chiamato
'Mouse'con prezzo29.5e quantità50 - Un prodotto chiamato
'Keyboard'con prezzo75.0e quantità30
Featured: [product]usando il prodotto Laptop.- Un prodotto chiamato
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]
}
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
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online