Noções básicas de data class: métodos gerados automaticamente
Entenda o que data class gera: equals, hashCode, toString e copy.
Noções básicas de data class: métodos gerados automaticamente é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 1 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.
O que é uma classe de dados?
Uma data class é uma classe cuja finalidade principal é armazenar valores. O compilador do Kotlin gera automaticamente as funções equals, hashCode, toString, copy e componentN para você.
Declarando uma classe de dados
Coloque data como prefixo de uma classe comum. Todos os parâmetros do construtor primário devem ser val ou var.
data class User(val name: String, val age: Int)
fun main() {
val u = User("Ada", 35)
println(u)
}toString gerado automaticamente
O compilador cria um toString que lista cada propriedade pelo nome.
data class Point(val x: Int, val y: Int)
fun main() {
println(Point(3, 5)) // Point(x=3, y=5)
}equals gerado automaticamente
equals compara todos os valores das propriedades — duas instâncias com os mesmos campos são iguais, independentemente da identidade da referência.
data class Coord(val lat: Double, val lng: Double)
fun main() {
val a = Coord(41.0, 29.0)
val b = Coord(41.0, 29.0)
println(a == b) // true (structural)
println(a === b) // false (reference)
}hashCode gerado automaticamente
hashCode é consistente com equals: objetos iguais produzem valores hash iguais, portanto as classes de dados funcionam corretamente em conjuntos e como chaves de mapas.
data class Key(val id: Int, val tag: String)
fun main() {
val map = mapOf(Key(1, "a") to "one")
println(map[Key(1, "a")]) // one
}copy gerado automaticamente
copy() cria uma nova instância com os mesmos valores de campo, permitindo substituições por campo usando argumentos nomeados.
data class Config(val host: String, val port: Int, val tls: Boolean)
fun main() {
val dev = Config("localhost", 8080, false)
val prod = dev.copy(host = "prod.example.com", tls = true)
println(prod) // Config(host=prod.example.com, port=8080, tls=true)
}componentN gerado automaticamente
Cada propriedade recebe uma função componentN() (component1, component2, ...) que permite a desestruturação.
data class Pair2(val first: String, val second: Int)
fun main() {
val p = Pair2("Ada", 35)
val (name, age) = p
println("$name is $age")
}O que as classes de dados não fazem
As classes de dados não geram toString para campos herdados, são final por padrão e não podem ser abstract, open, sealed ou inner.
data class Sample(val n: Int)
// open data class Bad(...) // ERROR
// sealed data class Bad(...) // ERROR
fun main() { println(Sample(1)) }Propriedades fora do construtor primário
As propriedades declaradas no corpo da classe NÃO participam de equals, hashCode, toString ou copy.
data class Person(val name: String) {
var nickname: String = ""
}
fun main() {
val a = Person("Ada").apply { nickname = "Augusta" }
val b = Person("Ada").apply { nickname = "Different" }
println(a == b) // true — only name matters
println(a) // Person(name=Ada)
}Valores padrão
Combine data class com parâmetros padrão para obter uma construção flexível.
data class Request(
val url: String,
val method: String = "GET",
val headers: Map<String, String> = emptyMap()
)
fun main() {
println(Request("https://api.example.com"))
}Prática: classe DTO
As classes de dados são perfeitas para DTOs, respostas de API e objetos de valor.
data class ApiResponse(
val status: Int,
val body: String,
val timestamp: Long
)
fun main() {
val ok = ApiResponse(200, "{}", System.currentTimeMillis())
println(ok)
}Verificação rápida
Qual método NÃO é gerado automaticamente pelo compilador do Kotlin para uma classe de dados?
Recapitulação
Uma data class gera automaticamente equals, hashCode, toString, copy e componentN a partir das propriedades do construtor primário. As propriedades fora do construtor são excluídas. Use classes de dados para DTOs, objetos de valor e qualquer contêiner de valores relacionados.
Perguntas Frequentes
A aula “Noções básicas de data class: métodos gerados automaticamente” é grátis?
Sim — o texto completo de “Noções básicas de data class: métodos gerados automaticamente” é 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 “Noções básicas de data class: métodos gerados automaticamente”?
Entenda o que data class gera: equals, hashCode, toString e copy. 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 1 de 4.
Quanto tempo leva a aula “Noções básicas de data class: métodos gerados automaticamente”?
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
- Noções básicas de data class: métodos gerados automaticamente
- Copiando com copy() e substituições parciais
- Declarações de desestruturação com componentN
- Data classes em coleções e como chaves de mapas