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

Vamos a construir un sistema de catálogo de productos donde cada producto muestre su información en un formato limpio y legible al ser impreso. Practicarás la sobrescritura del método toString() para hacer que tus objetos sean más fáciles de depurar y amigables para el usuario.

Organizarás tu código en dos archivos:

  • product.dart: Crea una clase Product que represente un artículo en una tienda. Tu producto debe tener un name (String), price (double) y quantity (int). Sobrescribe el método toString() para devolver una cadena formateada exactamente en este formato: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: Importa tu archivo de producto y demuestra cómo la sobrescritura de toString() hace que la impresión de 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 precio 999.99 y cantidad 5
    • Un producto llamado 'Mouse' con precio 29.5 y cantidad 50
    • Un producto llamado 'Keyboard' con precio 75.0 y cantidad 30
    También demuestra 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 sentencias 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