az osztályokat már láttuk egy korábbi cikkben, de az adatosztályok egy kicsit tovább mennek a kód egyszerűsítésében.
mik azok az adatosztályok?
az adatosztály olyan osztály, amely csak állapotokat tartalmaz, és semmilyen műveletet nem hajt végre.
az adatosztályok használatának előnye a szokásos osztályok helyett az, hogy Kotlin hatalmas mennyiségű saját generált kódot ad nekünk.
különösen ez ad nekünk mindezt ingyen:
- a konstruktorban deklarált tulajdonságok: ez technikailag nem kizárólag egy adatosztályra vonatkozik, de a konstruktoron kívül elkerüli a getterek és szetterek összes kazánját.
-
equals()
/hashCode()
- a
componentX()
nevű függvénykészlet, amely lehetővé teszi számunkra, hogy egy hűvös dolgot tegyünk, amit később látni fogunk. - a
copy()
módszer, nagyon hasznos, ha megváltoztathatatlan objektumokat használunk.
¿milyen a Java kód egy adatosztályhoz képest?
itt jön a awesomeness. Bár ezt a kódot szinte az IDE generálja, a Java-ban erre szükségünk van egy adatosztály megvalósításához:
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 + ''' + '}'; }}
még mindig messze nem érnénk el ugyanazt a funkcionalitást, amelyet Kotlin biztosít ezzel a sorral:
data class Person(var name: String, var surname: String, var id: String)
itt látjuk igazán Kotlin potenciálját, a haszontalan kód mennyiségében, amely megment minket.
osztályok destructuring
ez a componentX
függvények használata. Nekik köszönhetően így bonthatja az adatosztályt változókban:
meg akarod tanulni Kotlint?
nézze meg az ingyenes útmutatót, hogy 15 perc alatt elkészítse első projektjét!
val person = Person("x", "y", "z")val (n, s, i) = person
ennek köszönhetően olyan dolgokat tehet, mint a térképpárok lebontása egy hurokban:
val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}
tárgyak copy
mint már beszéltünk, ez egy jó gyakorlat számunkra változhatatlanság minden lehetséges helyzetben. Ha az előző osztályt megváltoztathatatlannak valósítjuk meg:
data class Person(val name: String, val surname: String, val id: String)
ha most meg akarjuk változtatni a vezetéknevet, nem leszünk képesek.
ha változhatatlansággal dolgozik, az objektum állapotának megváltoztatásához át kell másolnia az új értékkel. És ez a copy
funkció használata:
val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")
a copy
függvény annyi paramétert fogadhat, amennyit meg kell változtatnia. Mint látható, a függvényparaméterek megnevezhetők, így megadhatja, hogy melyiket szeretné módosítani.
következtetés
az adatosztályok sok olyan boilerplate-t takarítanak meg, amelyet a Java arra kényszerít, hogy létrehozzunk, így egy olyan kódot kapunk, amely könnyebben érthető és karbantartható.
ha tetszik, amit látott, azt javasoljuk, hogy iratkozzon fel az én ingyenes képzés, ahol elmondom, mindent meg kell tanulni, hogyan lehet létrehozni a saját Android Alkalmazások Kotlin a semmiből.