Clases de datos en Kotlin: guarda un buen montón de líneas de código (KAD 10)

Ya hemos visto las clases en un artículo anterior, pero las clases de datos van un poco más allá para ayudarnos a simplificar nuestro código.

¿Qué son las clases de datos?

Una clase de datos es una clase que solo contiene estado y no realiza ninguna operación.

La ventaja de usar clases de datos en lugar de clases regulares es que Kotlin nos da una inmensa cantidad de código autogenerado.

En particular, nos da todo esto de forma gratuita:

  • Las propiedades declaradas en el constructor: esto técnicamente no es exclusivo de una clase de datos, pero evita todo el repetitivo de getters y setters, además del constructor.
  • equals() / hashCode()
  • Un conjunto de funciones llamadas componentX(), que nos permiten hacer algo genial que veremos más adelante.
  • Un método copy(), muy útil cuando usamos objetos inmutables.

¿¿Cómo se compara el código Java con una clase de datos?

Aquí viene la genialidad. Aunque casi todo este código es generado por el IDE, en Java lo necesitamos para implementar una clase de datos:

public class Person { private String name; private String surname; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (name != null ? !name.equals(person.name) : person.name != null) return false; if (surname != null ? !surname.equals(person.surname) : person.surname != null) return false; return id != null ? id.equals(person.id) : person.id == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (surname != null ? surname.hashCode() : 0); result = 31 * result + (id != null ? id.hashCode() : 0); return result; } @Override public String toString() { return "Person{" + "name='" + name + ''' + ", surname='" + surname + ''' + ", + id + ''' + '}'; }}

Y aún estaríamos lejos de lograr la misma cantidad de funcionalidad que Kotlin proporciona con esta línea:

data class Person(var name: String, var surname: String, var id: String)

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

Desestructuración de clases

Es el uso de funciones componentX. Gracias a ellos, puede descomponer una clase de datos en variables de esta manera:

Quieres aprender Kotlin?

Comprobar mi guía gratuita para crear tu primer proyecto en 15 minutos!

val person = Person("x", "y", "z")val (n, s, i) = person

Gracias a esto, puedes hacer cosas como descomponer pares de mapas dentro de un bucle:

val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}

Copiar objetos

Como hemos hablado antes, es una buena práctica para nosotros la inmutabilidad en todas las situaciones posibles. Si implementamos la clase anterior como inmutable:

data class Person(val name: String, val surname: String, val id: String)

Si ahora queremos cambiar el apellido, no podremos.

Cuando trabaja con inmutabilidad, para cambiar el estado de un objeto, debe copiarlo con el nuevo valor. Y ese es el uso de la función copy :

val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")

La función copy puede recibir tantos parámetros como valores que necesite cambiar. Como puede ver, los parámetros de función se pueden nombrar, por lo que puede especificar cuáles desea modificar.

Conclusión

las clases de datos guardan una gran cantidad de repeticiones que Java nos obliga a generar, por lo que terminas con un código que es más fácil de entender y mantener.

Si te gusta lo que has visto, te animo a que te inscribas en mi formación gratuita, donde te contaré todo lo que necesitas aprender sobre cómo crear tus propias Aplicaciones Android en Kotlin desde cero.

Me gusta Cargando…

Deja una respuesta

Tu dirección de correo electrónico no será publicada.