copy e equals
Funções geradas
copy e equals é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 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 Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
Funções geradas
Além de toString, uma classe de dados gera equals, hashCode e copy.
Essas três funções tornam as classes de dados muito fáceis de comparar e clonar.
Igualdade estrutural
A função equals gerada compara os objetos pelos valores de suas propriedades, não pela identidade.
Duas instâncias de uma classe de dados com os mesmos valores são iguais usando ==.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = User("Alice", 30)
println(a == b)
}Valores diferentes não são iguais
Altere qualquer propriedade e os objetos deixarão de ser iguais.
A igualdade é calculada a partir de todas as propriedades do construtor primário.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = User("Alice", 31)
println(a == b)
}Igualdade versus identidade
Use == para igualdade por valor (estrutural) e === para igualdade por referência (identidade).
Dois objetos de dados iguais podem ser instâncias diferentes na memória.
data class User(val name: String)
fun main() {
val a = User("Alice")
val b = User("Alice")
println(a == b) // values match
println(a === b) // different instances
}hashCode consistente
hashCode é gerado de modo compatível com equals: objetos iguais produzem o mesmo hash.
É isso que faz as classes de dados funcionarem corretamente em conjuntos e como chaves de mapas.
data class Point(val x: Int, val y: Int)
fun main() {
val a = Point(1, 2)
val b = Point(1, 2)
println(a.hashCode() == b.hashCode())
}A função copy
copy cria um novo objeto idêntico ao original.
Com propriedades val imutáveis, copiar é a maneira de criar uma versão modificada.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = a.copy()
println(b)
println(a == b)
}Copiando com alterações
Passe argumentos nomeados para copy a fim de alterar propriedades específicas mantendo as demais.
Esse é o padrão usual para atualizar dados imutáveis.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val older = a.copy(age = 31)
println(a)
println(older)
}copy mantém o original intacto
copy nunca modifica o objeto de origem. O original mantém seus valores.
Essa imutabilidade torna as alterações de estado previsíveis e seguras.
data class Account(val owner: String, val balance: Int)
fun main() {
val original = Account("Sam", 100)
val updated = original.copy(balance = 150)
println(original.balance)
println(updated.balance)
}Encadeando cópias
Como copy retorna um novo objeto, você pode aplicar várias atualizações em sequência.
Cada etapa produz um valor novo e independente.
data class Config(val volume: Int, val muted: Boolean)
fun main() {
val base = Config(50, false)
val result = base.copy(volume = 70).copy(muted = true)
println(result)
}Apenas as propriedades do construtor contam
Assim como na igualdade, copy trata apenas das propriedades do construtor primário.
As propriedades do corpo são redefinidas para seus valores padrão na cópia; portanto, mantenha o estado importante no construtor.
data class User(val name: String) {
var note: String = "none"
}
fun main() {
val a = User("Alice")
a.note = "VIP"
val b = a.copy()
println(b.note) // back to default
}Reunindo tudo
As funções geradas dão poder às classes de dados:
equalse==comparam por valorhashCodepermanece consistente com equalscopyclona com alterações opcionais
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = a.copy(name = "Alicia")
println(a == b)
println(b)
}Verificação rápida
Teste sua compreensão sobre copy e equals.
Recapitulação
Você aprendeu as funções geradas das classes de dados:
- equals compara por valor;
==versus=== - hashCode permanece consistente para coleções
- copy clona com alterações seletivas
A seguir, você aprenderá como o desmembramento divide objetos em variáveis.
Perguntas Frequentes
A aula “copy e equals” é grátis?
Sim — o texto completo de “copy e equals” é 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 Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “copy e equals”?
Funções geradas Você pratica Kotlin 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 Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin 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 2 de 4.
Quanto tempo leva a aula “copy e equals”?
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 Kotlin Academy?
Sim. Cada aula de Kotlin 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
- Declaração de Classes de Dados
- copy e equals
- Declarações de Desestruturação
- Classes de Dados em Coleções