we hebben de klassen al gezien in een eerder artikel, maar dataklassen gaan een beetje verder in het helpen van ons vereenvoudigen van onze code.
Wat zijn gegevensklassen?
een gegevensklasse is een klasse die alleen Status bevat en geen enkele bewerking uitvoert.
het voordeel van het gebruik van gegevensklassen in plaats van reguliere klassen is dat Kotlin ons een immense hoeveelheid zelf gegenereerde code geeft.
in het bijzonder geeft het ons dit alles gratis:
- de eigenschappen die in de constructor zijn opgegeven: Dit is technisch niet exclusief voor een gegevensklasse, maar vermijdt alle ketelplaten van getters en setters, naast de constructor.
-
equals()
/hashCode()
- een set functies genaamd
componentX()
, die ons in staat stellen iets cools te doen wat we later zullen zien. - een
copy()
methode, erg handig als we onveranderlijke objecten gebruiken.
¿Hoe is Java-code vergeleken met een dataklasse?
hier komt het geweldige. Hoewel bijna al deze code wordt gegenereerd door de IDE, in Java hebben we dit nodig om een data class te implementeren:
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 + ''' + '}'; }}
en we zouden nog ver van het bereiken van dezelfde hoeveelheid functionaliteit die Kotlin biedt met deze lijn:
data class Person(var name: String, var surname: String, var id: String)
Dit is waar we echt Kotlin ‘ s potentieel zien, in de hoeveelheid nutteloze code die ons redt.
Klassenvernietiging
dat is het gebruik van componentX
functies. Dankzij hen kunt u op deze manier een gegevensklasse in variabelen ontleden:
wil je Kotlin leren?
bekijk mijn gratis gids om je eerste project in 15 minuten te maken!
val person = Person("x", "y", "z")val (n, s, i) = person
Dankzij deze, kunt u de dingen doen zoals het versmelten van de kaart paren in een loop:
val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}
Objecten kopiëren
Als we hebben gesproken voordat, het is een goede gewoonte om ons onveranderlijkheid in alle mogelijke situaties. Als we vorige klasse als onveranderlijk implementeren:
data class Person(val name: String, val surname: String, val id: String)
als we nu de achternaam willen veranderen, kunnen we dat niet.
wanneer u met onveranderbaarheid werkt, moet u de status van een object kopiëren met de nieuwe waarde. En dat is het gebruik van de functie copy
:
val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")
de functie copy
kan zoveel parameters ontvangen als waarden die u moet wijzigen. Zoals u kunt zien, kunnen functieparameters worden benoemd, zodat u kunt opgeven welke u wilt wijzigen.
conclusie
gegevensklassen slaan veel standaardteksten op die Java ons dwingt te genereren, zodat u een code krijgt die gemakkelijker te begrijpen en te onderhouden is.
als je het leuk vindt wat je hebt gezien, moedig ik je aan om je aan te melden voor mijn gratis training, waar ik je alles zal vertellen wat je nodig hebt om te leren hoe je je eigen Android-Apps in Kotlin kunt maken vanaf nul.