Ak potrebuješ uchovávať stav aplikácie. Teda máš premenné a potrebuješ ich nastavovať a získavať ich hodnoty, tak vieš použiť Data class.
Máme triedu Auto:
class Auto (val nazov: String, val pocetDveri: Int = 4) {
}
Ako z nej spravím data class? Jednoducho pred slovo class pridáme data:
data class Auto (val nazov: String, val pocetDveri: Int = 4) {
}
Čo sa zmenilo? Kotlin nám na pozadí poskytol ďalšiu funkcionalitu. Spraví špeciálnu implementáciu funkcií ako toString alebo equals. Ak sa nám nepáčia, stále ich vieme ovverridnúť a napísať sami.
Konštruktor v data class musí obsahovať len property, nemôžeme odstrániť val alebo var.
Ak sa pokúsim vypísať na konzolu instanciu:
val skoda = Auto("Skoda", 5)
print(skoda)
Tak na výpise bude pekný text:
Auto(nazov=Skoda, pocetDveri=5)
Ak sa pokúsim vypísať instanciu nie data classy:
val osoba = Osoba("Jaro", "151515/1616")
println(osoba)
Tak na výpise už nebude taký pekný text:
sk.jaroslavbeno.kotlin.Osoba@506e1b77
Podobne to bude aj pri porovnávaní. Povedali sme si, že existuje takzv štrukturálne porovnávanie, kde sme museli napísať vlastnú equals funkciu na porovnanie rodných čísel a až vtedy sa nám dva objekty rovnali. Majme teraz jednoduchú triedu osoba:
class Osoba(var meno: String, val rodCislo: String) {
}
A štrukturálne porovnajme dve instancie – dva objekty typu Osoba s rovnakým menom a rovnakým rodným číslom:
val osoba = Osoba("Jaro", "151515/1616")
val osoba2 = Osoba("Jaro", "151515/1616")
println(osoba == osoba2)
Na výpise bude false.
Ak to isté spravím z data class – porovnám dva objekty, bez toho aby som zašpecifikoval vlastnú equals metódu:
val skoda = Auto("Skoda", 5)
val skoda2 = Auto("Skoda", 5)
println(skoda == skoda2)
Tak na výpise bude true. V data classoch sa porovnajú štruktúry – property na pozadí. Ak chceme tak vieme prepísať equals funkciu ako sme to robili pri Osobe.
Ďalšou pomocnou funkciou je copy. Táto funkcia nám spraví to, že vytvorí nový objekt, na základe starého objektu – prekopíruje jeho štruktúru.
val skoda3 = skoda.copy()
Štrukturálne budú objekty rovnaké ale budú mať inú referenciu:
println(skoda == skoda3) //true
println(skoda === skoda3) //false
Copy funkcia nám dovoľuje zašpecifikovať, ktoré property chceme nastaviť inak ako sú v pôvodnom objekte. Napr. počet dverí bude iný:
val skoda4 = skoda.copy(pocetDveri = 4)
Postupne čiarkou a nastavením property vieš nastaviť aj iné property.
- Písanie kódu – programovanie v Jave
- Naprogramuj si vlastnú Android aplikáciu v jazyku Kotlin
- Divi scroll efekty
- Dizajnujem web v Divi téme (WordPress)
- Divi najlepšia WordPress téma – 9 dôvodov prečo ju používať (2020)
Páčil sa ti článok? Zváž zdieľanie. Ďakujeme.