Sobes.tech
Junior

¿Cómo funcionan las clases de datos en Kotlin?

sobes.tech AI

Respuesta de la IA

Las clases de datos en Kotlin se utilizan para almacenar datos. El compilador genera automáticamente los métodos estándar:

  • equals(): Compara instancias basándose en los valores de sus propiedades.
  • hashCode(): Genera un código hash basado en los valores de las propiedades.
  • toString(): Devuelve una representación en forma de cadena que incluye los nombres y valores de todas las propiedades.
  • copy(): Crea una copia del objeto, modificando los valores de las propiedades indicadas si es necesario.
  • componentN(): Métodos para la desestructuración (descomposición del objeto en propiedades individuales).
// Ejemplo de clase de datos
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // true
    println(user1 == user3) // false

    // toString()
    println(user1.toString()) // User(name=Alice, age=30)

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() y desestructuración
    val (name, age) = user1
    println("Nombre: $name, Edad: $age") // Nombre: Alice, Edad: 30
}

Puntos clave:

  • Todas las propiedades definidas en el constructor principal deben ser val o var.
  • La clase de datos no puede ser abstract, open, sealed o inner.
  • Las clases de datos pueden heredar otras clases o implementar interfaces.
  • Las propiedades declaradas fuera del constructor principal no participan en la generación de los métodos estándar.
Método Descripción
equals() Compara las propiedades del constructor principal.
hashCode() Genera un hash basado en las propiedades del constructor principal.
toString() Muestra una representación en cadena de las propiedades del constructor principal.
copy() Crea una copia superficial con la opción de modificar propiedades.
componentN() Accede a las propiedades en orden de declaración en el constructor.

Las clases de datos simplifican significativamente el trabajo con POJO (Plain Old Java Object) o DTO (Data Transfer Object), reduciendo el código boilerplate.