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, podrías ver 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, 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, ya sea 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 imprimirse. Practicarás la sobrescritura del método toString() para hacer que tus objetos sean más fáciles de depurar y más 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)

Hoja de referencia

Por defecto, imprimir un objeto en Dart muestra Instance of 'ClassName'. Sobrescribe el método toString() para proporcionar representaciones de cadena significativas:

class Person {
  String name;
  int age;
  
  Person(this.name, this.age);
  
  @override
  String toString() {
    return 'Person(name: $name, age: $age)';
  }
}

El método toString() se llama automáticamente en las sentencias print() y en la interpolación de cadenas:

var person = Person('Alice', 30);
print(person);  // Person(name: Alice, age: 30)
var message = 'User: $person';  // toString() se llama automáticamente

Pruébalo tú mismo

import 'product.dart';

void main() {
  // TODO: Crear 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: Imprimir cada producto (se llamará a toString() automáticamente)

  // TODO: Imprimir un mensaje destacado usando interpolación de cadenas
  // Format: 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