Sobes.tech
Junior

Qual é a característica especial da Data Class em comparação com outras classes em Kotlin?

sobes.tech IA

Resposta da IA

Características da Data Class em Kotlin:

  • Geração automática das funções equals(), hashCode(), toString(), copy() e componentN().
  • Requerem pelo menos um parâmetro no construtor.
  • Todos os parâmetros do construtor devem ser declarados como val ou var.
  • Destinam-se principalmente ao armazenamento de dados.

Exemplo:

// Classe normal
class User(val name: String, val age: Int)

// Data Class
data class DataUser(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    println(user1 == user2) // false (compara referências por padrão)
    println(user1.toString()) // Mostrará algo como User@hashcode

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (compara dados)
    println(dataUser1.toString()) // Mostrará DataUser(name=Alice, age=30)
}

Diferenças nas funções geradas:

Função Classe normal Data Class
equals() Comparação de referências Comparação de dados por campos
hashCode() Depende da implementação Depende dos dados por campos
toString() Nome da classe e hash Nome da classe e valores dos campos
copy() Não (requer implementação manual) Sim (permite criar cópias facilmente)
componentN() Não Sim (permite destruturar o objeto)

Uso de componentN():

// Definição de uma Data Class
data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // Desestruturação usando component1(), component2()
    println("x: $x, y: $y") // Mostrará x: 10, y: 20
}