0Pricing
Dart Academy · Aula

copyWith e Igualdade por Valor

Atualize dados imutáveis e compare por valor.

copyWith e Igualdade por Valor é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Dart Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Dart Academy inclui 4 aulas no total.

Atualizando dados imutáveis

Você não pode alterar um objeto imutável; portanto, para atualizá-lo, crie um novo. O padrão que faz isso de maneira simples é copyWith.

O que copyWith faz

Um método copyWith retorna um novo objeto, mantendo os valores atuais dos campos que você omitir e substituindo apenas aqueles que informar.

final updated = user.copyWith(name: 'Ada');

Escrevendo copyWith

Cada parâmetro aceita nulo e tem como padrão o campo existente. Isso permite que os chamadores substituam apenas os campos relevantes.

User copyWith({String? name}) =>
  User(name: name ?? this.name);

A armadilha do nulo

O truque ?? this.field significa que você não pode definir um campo como nulo usando copyWith. A maioria dos modelos de dados aceita essa pequena limitação.

Igualdade padrão

Por padrão, dois objetos só são iguais quando são a mesma instância. Duas cópias com dados idênticos ainda são consideradas diferentes.

User('Ada') == User('Ada'); // false

Objetivo da igualdade por valor

Muitas vezes, você quer que os objetos sejam iguais quando seus dados coincidirem, não quando sua identidade for a mesma. Isso se chama igualdade por valor, e você precisa optar por ela.

Substitua o operador ==

Defina operator == para comparar os campos relevantes. Agora, dois objetos com os mesmos dados serão tratados como iguais.

bool operator ==(o) =>
  o is User && o.name == name;

Sempre substitua hashCode

Sempre que substituir ==, você também deverá substituir hashCode. Objetos iguais precisam compartilhar o mesmo hash; caso contrário, Sets e Maps apresentarão comportamento incorreto.

int get hashCode => name.hashCode;

Auxiliar Object.hash

Combine vários campos de maneira simples com Object.hash. Ele produz um bom código hash a partir de todos os valores informados.

int get hashCode => Object.hash(name, age);

A igualdade potencializa coleções

Com igualdade por valor, um Set pode eliminar duplicatas reais e um Map pode encontrar chaves pelos dados, não pela identidade.

Deixe as ferramentas fazerem isso

Pacotes como equatable ou freezed geram ==, hashCode e copyWith para você, mantendo seus modelos imutáveis curtos e corretos. 🛠️

Verificação rápida

Verificação rápida sobre igualdade por valor.

Recapitulação

Você aprendeu a atualizar dados imutáveis com copyWith e a comparar por dados usando == e hashCode para obter uma verdadeira igualdade por valor. 🌟

Perguntas Frequentes

A aula “copyWith e Igualdade por Valor” é grátis?

Sim — o texto completo de “copyWith e Igualdade por Valor” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Dart Academy, atualize para CoddyKit PRO. O curso de Dart Academy inclui 4 aulas no total.

O que vou aprender em “copyWith e Igualdade por Valor”?

Atualize dados imutáveis e compare por valor. Você pratica Dart Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Dart Academy?

Nenhuma experiência prévia é necessária. Dart Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “copyWith e Igualdade por Valor”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Dart Academy?

Sim. Cada aula de Dart Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Campos Finais e Imutabilidade Profunda
  2. Classes sealed e switch Exaustivo
  3. Modificadores base, interface e final
  4. copyWith e Igualdade por Valor
← Voltar para Dart Academy