O que é Data Class em Kotlin?

Uma data class em Kotlin é uma classe feita especialmente para armazenar dados. Quando você declara uma classe com o modificador data, o compilador gera automaticamente os métodos equals(), hashCode(), toString(), copy() e funções componentN() — tudo de graça.

Em Java, você precisaria escrever tudo isso na mão (ou usar uma biblioteca). Em Kotlin, basta uma linha.

Sintaxe básica

data class Usuario(val nome: String, val email: String, val idade: Int)

fun main() {
    val user = Usuario("Mariana", "mari@email.com", 30)
    println(user) // Usuario(nome=Mariana, email=mari@email.com, idade=30)
}

Olha só: o toString() já vem formatado bonitinho, sem você fazer nada.

Comparação automática

Com data class, a comparação entre objetos é feita pelo conteúdo, não pela referência:

val a = Usuario("Lucas", "lucas@email.com", 25)
val b = Usuario("Lucas", "lucas@email.com", 25)

println(a == b)  // true — mesmo conteúdo
println(a === b) // false — objetos diferentes na memória

A função copy()

Uma das funcionalidades mais práticas é o copy(), que cria uma cópia do objeto permitindo alterar apenas alguns campos:

val original = Usuario("Ana", "ana@email.com", 22)
val atualizado = original.copy(idade = 23)

println(atualizado) // Usuario(nome=Ana, email=ana@email.com, idade=23)

Isso é especialmente útil quando você trabalha com objetos imutáveis e precisa criar variações.

Destructuring

As funções componentN() geradas permitem usar destructuring:

val (nome, email, idade) = Usuario("Pedro", "pedro@email.com", 35)
println("$nome ($email) - $idade anos")

Regras importantes

  • O construtor primário precisa ter pelo menos um parâmetro.
  • Todos os parâmetros do construtor devem ser val ou var.
  • Data classes não podem ser abstract, open, sealed ou inner.

Data classes são perfeitas pra representar entidades, respostas de API, configurações e qualquer estrutura que carregue dados no seu projeto Kotlin.