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'); // falseObjetivo 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
- Campos Finais e Imutabilidade Profunda
- Classes sealed e switch Exaustivo
- Modificadores base, interface e final
- copyWith e Igualdade por Valor