Menu
Coddy logo textTech

Sobrescrita de toString()

Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy — lição 70 de 110.

Quando você imprime um objeto em Dart, você pode ver algo como Instance of 'Person' - não muito útil. Isso acontece porque cada classe herda um método toString() padrão de Object que apenas retorna o nome da classe.

Ao sobrescrever toString(), você pode fornecer uma representação de string significativa de seus 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)
}

Sem a sobrescrita, print(person) exibiria Instance of 'Person'. Com ela, você obtém informações úteis sobre o estado do objeto.

O método toString() é chamado automaticamente sempre que o Dart precisa converter seu objeto em uma string - em instruções print(), interpolação de string ou ao concatenar com outras strings:

var message = 'User: $person';  // toString() chamado automaticamente
print('Found: ' + person.toString());  // Chamada explícita

Um toString() bem implementado torna a depuração muito mais fácil, permitindo que você inspecione rapidamente os valores dos objetos durante o desenvolvimento.

challenge icon

Desafio

Fácil

Vamos construir um sistema de catálogo de produtos onde cada produto exibe suas informações em um formato limpo e legível quando impresso. Você praticará a sobrescrita do método toString() para tornar seus objetos mais fáceis de depurar e amigáveis ao usuário.

Você organizará seu código em dois arquivos:

  • product.dart: Crie uma classe Product que representa um item em uma loja. Seu produto deve ter um name (String), price (double) e quantity (int). Sobrescreva o método toString() para retornar uma string formatada exatamente neste formato: Product(name: [name], price: $[price], qty: [quantity])
  • main.dart: Importe seu arquivo de produto e demonstre como a sobrescrita do toString() torna a impressão de objetos muito mais útil. Crie três produtos e imprima-os para ver sua representação de string personalizada em ação:
    • Um produto chamado 'Laptop' com preço 999.99 e quantidade 5
    • Um produto chamado 'Mouse' com preço 29.5 e quantidade 50
    • Um produto chamado 'Keyboard' com preço 75.0 e quantidade 30
    Também demonstre a interpolação de strings imprimindo uma mensagem que inclua um de seus produtos: Featured: [product] usando o produto Laptop.

Observe como imprimir cada produto diretamente mostra informações significativas em vez da mensagem pouco útil Instance of 'Product'. Seu método toString() é chamado automaticamente tanto em instruções print() quanto ao usar interpolação de strings.

Saída 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)

Folha de consulta

Por padrão, imprimir um objeto em Dart mostra Instance of 'ClassName'. Sobrescreva o método toString() para fornecer representações de string significativas:

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

O método toString() é chamado automaticamente em instruções print() e interpolação de strings:

var person = Person('Alice', 30);
print(person);  // Person(name: Alice, age: 30)
var message = 'User: $person';  // toString() called automatically

Experimente você mesmo

import 'product.dart';

void main() {
  // TODO: Crie três instâncias de Product:
  // 1. Laptop - price: 999.99, quantity: 5
  // 2. Mouse - price: 29.5, quantity: 50
  // 3. Keyboard - price: 75.0, quantity: 30

  // TODO: Imprima cada produto (toString() será chamado automaticamente)

  // TODO: Imprima uma mensagem de destaque usando interpolação de string
  // Formato: Featured: [laptop product]
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos