Object.toString în Dart

Returnează textul care descrie obiectul; îl folosesc print și interpolarea. Îl suprascrii în clasele tale.

Sintaxă
String toString()

Ce face Object.toString

toString() transformă un obiect în text. Este apelat automat de print, de interpolare ('$obiect') și de StringBuffer.write. Pentru tipurile de bază rezultatul este cel așteptat: 42, [1, 2], {a: 1}.

Implementarea din Object returnează doar Instance of 'NumeClasa', ceea ce nu ajută. Suprascrie metoda în clasele tale cu @override ca să afișezi câmpurile importante. Așa depanarea devine mult mai ușoară.

toString() este gândit pentru oameni și pentru depanare. Pentru salvare sau trimitere a datelor (JSON, fișiere) scrie metode separate, de exemplu toJson().

Ce returnează

Un String.

Exemple

Exemplul 1: Cu și fără toString propriu

class Carte {
  final String titlu;
  final String autor;
  Carte(this.titlu, this.autor);
}

class Produs {
  final String nume;
  final double pret;
  Produs(this.nume, this.pret);

  @override
  String toString() => '$nume (${pret.toStringAsFixed(2)} lei)';
}

void main() {
  print(Carte('Amintiri din copilărie', 'Ion Creangă'));
  var p = Produs('Cafea', 18.5);
  print(p);
  print('În coș: $p');
  print([Produs('Lapte', 7.9), Produs('Pâine', 4.5)]);
}

Rezultat

Instance of 'Carte'
Cafea (18.50 lei)
În coș: Cafea (18.50 lei)
[Lapte (7.90 lei), Pâine (4.50 lei)]

Exemplul 2: toString pentru tipurile de bază

void main() {
  print(42.toString());
  print(3.0.toString());
  print(true.toString());
  print([1, 'doi', null].toString());
  print({'oraș': 'Iași', 'cod': 700506}.toString());
  print(Duration(minutes: 90).toString());
  print(null.toString());
}

Rezultat

42
3.0
true
[1, doi, null]
{oraș: Iași, cod: 700506}
1:30:00.000000
null

Greșeli frecvente

  • Uiți @override sau greșești numele (toStrng). Fără eroare, print afișează în continuare Instance of ....
  • Folosești toString() ca format de salvare și apoi îl „parsezi” înapoi. Formatul nu este garantat; folosește JSON.

Comenzi înrudite

  • print: Afișează o valoare pe ecran (ieșirea standard), urmată de un rând nou.
  • Object: Clasa de bază a tuturor claselor Dart, cu excepția lui Null; runtimeType dă tipul real al unui obiect.
  • StringBuffer: Construiește un text din multe bucăți, eficient; la final toString() dă textul, iar clear() îl golește.