0Pricing
Kotlin Academy · Aula

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:

  • equals e == comparam por valor
  • hashCode permanece consistente com equals
  • copy clona 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

  1. Declaração de Classes de Dados
  2. copy e equals
  3. Declarações de Desestruturação
  4. Classes de Dados em Coleções
← Voltar para Kotlin Academy