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 dans lequel chaque produit affiche ses informations dans un format propre et lisible lors de son affichage. Tu t’exerceras à redéfinir la méthode toString() afin de rendre tes objets plus faciles à déboguer et plus conviviaux.

Tu organiseras ton code en deux fichiers :

  • product.dart : Crée une classe Product qui représente un article dans un magasin. Ton produit doit avoir un name (String), un price (double) et une quantity (int). Redéfinis la méthode toString() afin qu’elle renvoie une chaîne formatée selon ce format exact : Product(name: [name], price: $[price], qty: [quantity])
  • main.dart : Importe ton fichier de produit et montre comment la redéfinition de toString() rend l’affichage des objets beaucoup plus utile. Crée trois produits et affiche-les pour voir ta représentation personnalisée sous forme de chaîne en action :
    • Un produit nommé 'Laptop' au prix de 999.99 et en quantité 5
    • Un produit nommé 'Mouse' au prix de 29.5 et en quantité 50
    • Un produit nommé 'Keyboard' au prix de 75.0 et en quantité 30
    Montre également l’interpolation de chaînes en affichant un message qui inclut l’un de tes produits : Featured: [product] en utilisant le produit Laptop.

Remarque que l’affichage direct de chaque produit montre des informations pertinentes au lieu du message peu utile Instance of 'Product'. Ta méthode toString() est appelée automatiquement à la fois dans les instructions print() et lors de l’utilisation de l’interpolation de chaînes.

Résultat attendu :

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

Entraînez-vous par vous-même : Compilateur Dart en ligne