Ya hemos visto las clases en un artículo anterior, pero las data classes van un poco más allá en lo que a simplificación de código se refiere.

Este artículo forma parte de una serie de 30 artículos que estoy publicando con motivo del lanzamiento del curso presencial de Kotlin para Desarrolladores Android. Si estás disfrutando con el lenguaje, ¿qué te parecería empezar a utilizarlo tras un intensivo de un día?

kotin-desarrolladores-android

¿Qué es una data class?

Una data class no es más que una clase que sólo contiene estado y no realiza ninguna operación.

La ventaja de utilizar data classes en vez de clases normales es que Kotlin nos aporta una cantidad inmensa de código autogenerado.

En particular, nos da todo esto de gratis:

  • Las properties declaradas en el constructor: esto técnicamente no es exclusivo de una data class, pero nos evita todo el boilerplate de los getters y los setters, además del constructor.
  • Un par equals() / hashCode()
  • Una serie de funciones llamadas componentX(), que nos permiten hacer una cosa muy chula que veremos después.
  • Un método copy(), que nos será de mucha utilidad cuando utilicemos objetos inmutables.

¿Cómo se compara el código de Java con una data class?

Aquí viene lo increíble. Aunque este código es casi todo autogenerado, en Java necesitamos esto para implementar una clase de datos:

Y aún así estaríamos lejos de conseguir la misma cantidad de funcionalidad que en Kotlin se consigue con esta línea:

Aquí es donde verdaderamente vemos el potencial de Kotlin, en la cantidad de código inútil que nos ahorra.

Desestructuración de clases

Para esto sirven las funciones componentX de las que hablábamos antes. Gracias a ellas puedes descomponer una data class en variables de la siguiente forma:

Gracias a esto, podemos hacer cosas tan curiosas como descomponer los pares de un map en un bucle:

Copia de objetos

Como hemos hablado en otras ocasiones, por defecto se considera buena práctica hacer inmutable todo lo que sea posible. Si implementamos la clase anterior como inmutable:

Si queremos cambiar por ejemplo el apellido, ahora ya no podemos.

Cuando se trabaja con inmutabilidad, para cambiar un estado de un objeto, en realidad lo que se hace es copiarlo con el nuevo valor, y para eso la función copy de las data classes.

La función copy puede recibir tantos parámetros como valores a cambiar. Como ves, los parámetros de una función pueden ser nombrados, de tal forma que podemos especificar cuál es el que queremos modificar.

Conclusión

Las data classes nos ahorran un montón de boilerplate que Java nos obliga a generar, y hacen el código mucho más sencillo de entender.

Si te ha gustado el contenido, habrá mucho más como este en el intensivo presencial que impartiré dentro de poco. ¡Apúntate, antes de que te quedes sin plazas!