olemme jo nähneet luokat aiemmassa artikkelissa, mutta dataluokat menevät hieman pidemmälle auttaessaan meitä yksinkertaistamaan koodiamme.
mitkä ovat dataluokat?
dataluokka on luokka, joka sisältää vain tilan eikä suorita mitään operaatiota.
dataluokkien käytön etuna tavallisten luokkien sijaan on se, että Kotlin antaa meille valtavan määrän itse tuotettua koodia.
erityisesti se antaa meille tämän kaiken ilmaiseksi:
- rakentajan ilmoittamat ominaisuudet: tämä ei teknisesti koske dataluokkaa, mutta sillä vältetään rakentajan lisäksi kaikki gettereiden ja settereiden Kattilat.
-
equals()
/hashCode()
- joukko funktioita nimeltään
componentX()
, joiden avulla voimme tehdä siistin asian, jonka näemme myöhemmin. - a
copy()
menetelmä, erittäin hyödyllinen, kun käytämme muuttumattomia olioita.
¿miten Java-koodi on verrattuna dataluokkaan?
Here comes the awesomeness. Vaikka lähes kaikki tämä koodi syntyy IDE, Java tarvitsemme tätä toteuttaa dataluokka:
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 + ''' + '}'; }}
ja olisimme vielä kaukana samasta toiminnallisuuden määrästä kuin Kotlin tarjoaa tällä linjalla:
data class Person(var name: String, var surname: String, var id: String)
tässä me todella näemme Kotlinin potentiaalin, hyödyttömän koodin määrässä, joka pelastaa meidät.
luokat destructuring
That ’ s the use of componentX
functions. Niiden ansiosta voit hajottaa dataluokan muuttujina tällä tavalla:
Haluatko oppia Kotlin?
Tarkista ilmainen opas luoda ensimmäinen projekti 15 minuutissa!
val person = Person("x", "y", "z")val (n, s, i) = person
Tämän ansiosta voit tehdä asioita, kuten lahoavat karttaparit silmukan sisällä:
val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}
Objects copy
As we ’ve talked before, it’ s a good practice to us immutability in every possible situations. Jos toteutamme edellisen luokan muuttumattomana:
data class Person(val name: String, val surname: String, val id: String)
jos nyt halutaan vaihtaa sukunimeä, se ei onnistu.
kun työskentelet muuttumattomuudella, objektin tilan muuttamiseksi sinun täytyy kopioida se uudella arvolla. Ja se on copy
funktion käyttö:
val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")
funktio copy
voi vastaanottaa niin monta parametria kuin arvoja tarvitsee muuttaa. Kuten näet, funktioparametrit voidaan nimetä, joten voit määrittää, mitä haluat muokata.
johtopäätös
dataluokat tallentavat paljon kattilalevyä, jonka Java pakottaa meidät luomaan, joten päädyt koodiin, joka on helpompi ymmärtää ja ylläpitää.
jos pidät näkemästäsi, kehotan sinua ilmoittautumaan ilmaiseen koulutukseeni, jossa kerron kaiken, mitä tarvitset oppiaksesi luomaan omia Android-sovelluksia Kotliniin tyhjästä.