Wir haben die Klassen bereits in einem früheren Artikel gesehen, aber Datenklassen gehen ein wenig weiter und helfen uns, unseren Code zu vereinfachen.
Was sind Datenklassen?
Eine Datenklasse ist eine Klasse, die nur den Status enthält und keine Operation ausführt.
Der Vorteil der Verwendung von Datenklassen anstelle von regulären Klassen besteht darin, dass Kotlin uns eine immense Menge an selbst generiertem Code bietet.
Insbesondere gibt es uns das alles kostenlos:
- Die im Konstruktor deklarierten Eigenschaften: Dies ist technisch nicht exklusiv für eine Datenklasse, vermeidet jedoch zusätzlich zum Konstruktor alle Boilerplate-Getter und -setter.
-
equals()
/hashCode()
- Eine Reihe von Funktionen namens
componentX()
, die es uns ermöglichen, eine coole Sache zu tun, die wir später sehen werden. - Eine
copy()
Methode, sehr nützlich, wenn wir unveränderliche Objekte verwenden.
¿ Wie wird Java-Code mit einer Datenklasse verglichen?
Hier kommt die Großartigkeit. Obwohl fast der gesamte Code von der IDE generiert wird, benötigen wir dies in Java, um eine Datenklasse zu implementieren:
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 + ''' + '}'; }}
Und wir wären immer noch weit davon entfernt, die gleiche Funktionalität zu erreichen, die Kotlin mit dieser Zeile bietet:
data class Person(var name: String, var surname: String, var id: String)
Hier sehen wir wirklich Kotlins Potenzial in der Menge an nutzlosem Code, der uns rettet.
Klassen Destrukturierung
Das ist die Verwendung von componentX
Funktionen. Dank ihnen können Sie eine Datenklasse auf diese Weise in Variablen zerlegen:
Möchten Sie Kotlin lernen?
Schauen Sie sich meine kostenlose Anleitung an, um Ihr erstes Projekt in 15 Minuten zu erstellen!
val person = Person("x", "y", "z")val (n, s, i) = person
Dank dessen können Sie beispielsweise Kartenpaare in einer Schleife zerlegen:
val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}
Objekte kopieren
Wie wir bereits gesprochen haben, ist es eine gute Praxis für uns Unveränderlichkeit in allen möglichen Situationen. Wenn wir die vorherige Klasse als unveränderlich implementieren:
data class Person(val name: String, val surname: String, val id: String)
Wenn wir jetzt den Nachnamen ändern wollen, werden wir nicht in der Lage sein.
Wenn Sie mit Unveränderlichkeit arbeiten, müssen Sie den Status eines Objekts mit dem neuen Wert kopieren, um ihn zu ändern. Und das ist die Verwendung der Funktion copy
:
val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")
Die Funktion copy
kann so viele Parameter empfangen, wie Sie ändern müssen. Wie Sie sehen, können Funktionsparameter benannt werden, sodass Sie angeben können, welche Sie ändern möchten.
Fazit
data Classes spart eine Menge Boilerplate, die Java uns zwingt zu generieren, so dass Sie am Ende mit einem Code, der leichter zu verstehen und zu pflegen ist.
Wenn Ihnen gefällt, was Sie gesehen haben, empfehle ich Ihnen, sich für mein kostenloses Training anzumelden, in dem ich Ihnen alles erzähle, was Sie lernen müssen, um Ihre eigenen Android-Apps in Kotlin von Grund auf neu zu erstellen.