Kotlin Academy · Lección

copy y equals

Funciones generadas

Lección 2 de 413 pasos

copy y equals es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

Funciones generadas

Además de toString, una clase de datos genera equals, hashCode y copy.

Estas tres funciones hacen que las clases de datos sean muy fáciles de comparar y copiar.

Igualdad estructural

El equals generado compara los objetos por los valores de sus propiedades, no por su identidad.

Dos instancias de una clase de datos con los mismos valores son iguales mediante ==.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 30)
    println(a == b)
}

Los valores diferentes no son iguales

Si cambia cualquier propiedad, los objetos dejan de ser iguales.

La igualdad se calcula a partir de todas las propiedades del constructor principal.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 31)
    println(a == b)
}

Igualdad frente a identidad

Utilice == para la igualdad de valores (estructural) y === para la igualdad de referencias (identidad).

Dos objetos de datos iguales pueden ser instancias diferentes en memoria.

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 coherente

hashCode se genera de forma coherente con equals: los objetos iguales producen el mismo hash.

Esto permite que las clases de datos funcionen correctamente en conjuntos y como claves 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())
}

La función copy

copy crea un objeto nuevo idéntico al original.

Con propiedades val inmutables, copiar es la forma de crear una versión 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)
}

Copiar con cambios

Pase argumentos con nombre a copy para cambiar propiedades concretas y conservar el resto.

Este es el patrón estándar para actualizar datos inmutables.

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 conserva el original

copy nunca modifica el objeto de origen. El original conserva sus valores.

Esta inmutabilidad hace que los cambios de estado sean predecibles y seguros.

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)
}

Encadenar copias

Como copy devuelve un objeto nuevo, puede aplicar varias actualizaciones en secuencia.

Cada paso produce un valor nuevo e independiente.

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)
}

Solo cuentan las propiedades del constructor

Al igual que ocurre con la igualdad, copy solo gestiona las propiedades del constructor principal.

Las propiedades del cuerpo recuperan sus valores predeterminados en la copia, por lo que debe mantener el estado importante en el constructor.

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
}

Todo junto

Las funciones generadas dan su potencia a las clases de datos:

  • equals y == comparan por valor
  • hashCode mantiene la coherencia con equals
  • copy crea una copia con cambios opcionales
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)
}

Comprobación rápida

Compruebe cuánto ha comprendido sobre copy y equals.

Repaso

Ha aprendido las funciones generadas de las clases de datos:

  • equals compara por valor, == frente a ===
  • hashCode mantiene la coherencia en las colecciones
  • copy crea una copia con cambios selectivos

A continuación aprenderá cómo el desempaquetado divide los objetos en variables.

Gratis para empezar

Aprende Kotlin con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «copy y equals» es gratis?

Sí — el texto completo de «copy y equals» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «copy y equals»?

Funciones generadas Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «copy y equals»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Declaración de data classes
  2. copy y equals
  3. Declaraciones de destructuración
  4. Data classes en colecciones
← Volver a Kotlin Academy