Menu
Coddy logo textTech

Redéfinition de toString()

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 70 sur 110.

Lorsque vous affichez un objet en Dart, vous pourriez voir quelque chose comme Instance of 'Person' - ce qui n'est pas très utile. Cela se produit parce que chaque classe hérite d'une méthode toString() par défaut de Object qui ne renvoie que le nom de la classe.

En redéfinissant toString(), vous pouvez fournir une représentation textuelle significative de vos objets :

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

Sans la redéfinition, print(person) afficherait Instance of 'Person'. Avec elle, vous obtenez des informations utiles sur l'état de l'objet.

La méthode toString() est appelée automatiquement chaque fois que Dart a besoin de convertir votre objet en une chaîne de caractères - dans les instructions print(), l'interpolation de chaînes ou lors de la concaténation avec d'autres chaînes :

var message = 'User: $person';  // toString() appelée automatiquement
print('Found: ' + person.toString());  // Appel explicite

Une méthode toString() bien implémentée facilite grandement le débogage en vous permettant d'inspecter rapidement les valeurs des objets pendant le développement.

challenge icon

Défi

Facile

Construisons un système de catalogue de produits où chaque produit affiche ses informations dans un format propre et lisible lorsqu'il est imprimé. Vous allez vous entraîner à surcharger la méthode toString() pour rendre vos objets plus faciles à déboguer et plus conviviaux.

Vous organiserez votre code en deux fichiers :

  • product.dart : Créez une classe Product qui représente un article dans un magasin. Votre produit doit avoir un name (String), un price (double) et une quantity (int). Surchargez la méthode toString() pour retourner une chaîne formatée exactement selon ce format : Product(name: [name], price: $[price], qty: [quantity])
  • main.dart : Importez votre fichier de produit et démontrez comment la surcharge de toString() rend l'impression d'objets beaucoup plus utile. Créez trois produits et imprimez-les pour voir votre représentation personnalisée en action :
    • Un produit nommé 'Laptop' avec un prix de 999.99 et une quantité de 5
    • Un produit nommé 'Mouse' avec un prix de 29.5 et une quantité de 50
    • Un produit nommé 'Keyboard' avec un prix de 75.0 et une quantité de 30
    Démontrez également l'interpolation de chaîne en imprimant un message qui inclut l'un de vos produits : Featured: [product] en utilisant le produit Laptop.

Remarquez comment l'impression directe de chaque produit affiche des informations significatives au lieu du message peu utile Instance of 'Product'. Votre méthode toString() est appelée automatiquement à la fois dans les instructions print() et lors de l'utilisation de l'interpolation de chaîne.

Sortie attendue :

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)

Essayez vous-même

import 'product.dart';

void main() {
  // TODO: Créer trois instances de Product :
  // 1. Laptop - price: 999.99, quantity: 5
  // 2. Mouse - price: 29.5, quantity: 50
  // 3. Keyboard - price: 75.0, quantity: 30

  // TODO: Afficher chaque produit (toString() sera appelé automatiquement)

  // TODO: Afficher un message de mise en avant en utilisant l'interpolation de chaîne
  // Format: Featured: [laptop product]
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet