Menu
Coddy logo textTech

Sobrescritura de toString()

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy. Lección 70 de 110.

Cuando imprimes un objeto en Dart, es posible que veas algo como Instance of 'Person' - no es muy útil. Esto sucede porque cada clase hereda un método toString() predeterminado de Object que solo devuelve el nombre de la clase.

Al sobrescribir toString(), puedes proporcionar una representación de cadena significativa de tus objetos:

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

Sin la sobrescritura, print(person) mostraría Instance of 'Person'. Con ella, obtienes información útil sobre el estado del objeto.

El método toString() se llama automáticamente cada vez que Dart necesita convertir tu objeto en una cadena; en sentencias print(), interpolación de cadenas o al concatenar con otras cadenas:

var message = 'User: $person';  // toString() se llama automáticamente
print('Found: ' + person.toString());  // Llamada explícita

Un toString() bien implementado facilita mucho la depuración al permitirte inspeccionar rápidamente los valores de los objetos durante el desarrollo.

challenge icon

Desafío

Fácil

Construyamos un sistema de catálogo de productos en el que cada producto muestre su información en un formato limpio y legible al imprimirse. Practicarás la sobrescritura del método toString() para que tus objetos sean más fáciles de depurar y usar.

Organizarás tu código en dos archivos:

  • product.dart: Crea una clase Product que represente un artículo de una tienda. Tu producto debe tener un name (String), un price (double) y una quantity (int). Sobrescribe el método toString() para que devuelva una cadena con formato exactamente así: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: Importa tu archivo de producto y demuestra cómo la sobrescritura de toString() hace que imprimir objetos sea mucho más útil. Crea tres productos e imprímelos para ver tu representación de cadena personalizada en acción:
    • Un producto llamado 'Laptop' con un precio de 999.99 y una cantidad de 5
    • Un producto llamado 'Mouse' con un precio de 29.5 y una cantidad de 50
    • Un producto llamado 'Keyboard' con un precio de 75.0 y una cantidad de 30
    Demuestra también la interpolación de cadenas imprimiendo un mensaje que incluya uno de tus productos: Featured: [product], usando el producto Laptop.

Observa cómo imprimir cada producto directamente muestra información significativa en lugar del mensaje poco útil Instance of 'Product'. Tu método toString() se llama automáticamente tanto en las instrucciones print() como al usar la interpolación de cadenas.

Salida esperada:

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)

Pruébalo tú mismo

import 'product.dart';

void main() {
  // TODO: Crea tres instancias de Product:
  // 1. Laptop - price: 999.99, quantity: 5
  // 2. Mouse - price: 29.5, quantity: 50
  // 3. Keyboard - price: 75.0, quantity: 30

  // TODO: Imprime cada producto (se llamará a toString() automáticamente)

  // TODO: Imprime un mensaje destacado usando interpolación de cadenas
  // Formato: Featured: [laptop product]
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Dart online