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 expliciteUne 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.
Défi
FacileConstruisons 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 classeProductqui représente un article dans un magasin. Ton produit doit avoir unname(String), unprice(double) et unequantity(int). Redéfinis la méthodetoString()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 detoString()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 de999.99et en quantité5 - Un produit nommé
'Mouse'au prix de29.5et en quantité50 - Un produit nommé
'Keyboard'au prix de75.0et en quantité30
Featured: [product]en utilisant le produit Laptop.- Un produit nommé
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]
}
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
1Fondamentaux de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne