vi har allerede sett klassene i en tidligere artikkel, men dataklasser går litt lenger for å hjelpe oss med å forenkle koden vår.
hva er dataklasser?
en dataklasse er en klasse som bare inneholder tilstand og utfører ingen operasjon.
fordelen med å bruke dataklasser i stedet for vanlige klasser er At Kotlin gir oss en enorm mengde selvgenerert kode.
spesielt gir det oss alt dette gratis:
- egenskapene deklarert i konstruktøren: dette er teknisk sett ikke eksklusivt for en dataklasse, men det unngår alle boilerplate av getters og settere, i tillegg til konstruktøren.
-
equals()
/hashCode()
- Et sett med funksjoner kalt
componentX()
, som tillater oss å gjøre en kul ting vi ser senere. - en
copy()
metode, veldig nyttig når vi bruker uforanderlige objekter.
¿Hvordan Er Java-kode sammenlignet med en dataklasse?
Her kommer awesomeness. Selv om nesten all denne koden genereres AV IDE, Trenger Vi I Java dette for å implementere en dataklasse:
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 + ''' + '}'; }}
og vi vil fortsatt være langt fra å oppnå samme mengde funksjonalitet Som Kotlin gir med denne linjen:
data class Person(var name: String, var surname: String, var id: String)
Det er her Vi virkelig ser Kotlins potensial, i mengden ubrukelig kode som sparer oss.
klassestrukturering
det er bruken av componentX
funksjoner. Takket være dem kan du dekomponere en dataklasse i variabler på denne måten:
Vil du lære Kotlin?
Sjekk min gratis guide for å lage ditt første prosjekt i 15 minutter!
val person = Person("x", "y", "z")val (n, s, i) = person
Takket være dette kan du gjøre ting som å dekomponere kartpar i en løkke:
val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}
Objekter kopier
Som vi har snakket før, er det en god praksis for oss uforanderlighet i alle mulige situasjoner. Hvis vi implementerer forrige klasse som uforanderlig:
data class Person(val name: String, val surname: String, val id: String)
hvis vi nå vil endre etternavnet, vil vi ikke kunne.
når du arbeider med uforanderlighet, for å endre tilstanden til et objekt må du kopiere den med den nye verdien. Og det er bruken av copy
– funksjonen:
val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")
funksjonen copy
kan motta så mange parametere som verdier du må endre. Som du kan se, kan funksjonsparametere bli navngitt, slik at du kan angi hvilke du vil endre.
Konklusjon
dataklasser sparer mye standardtekst Som Java tvinger Oss til å generere, slik at du ender opp med en kode som er lettere å forstå og vedlikeholde.
hvis du liker det du har sett, oppfordrer jeg deg til å registrere deg for min gratis trening, hvor jeg forteller deg alt du trenger for å lære om hvordan du lager Dine Egne Android-Apper I Kotlin fra bunnen av.