Select Page

Kotlin Data class

Jaroslav Beňo

26/05/2020

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.

O autorovi: Jaroslav Beňo

Jaro je v skratke kresťan, manžel, otec a programátor. Na tomto webe sa venuje programovaniu. Jeho túžbou je šíriť vedomosti ďalej, aby sme mohli spolu rásť.

Pripravil viacero online video kurzov. Jeho sociálne siete:

Podobné články

Kotlin extension functions

Predstav si, že chceš manipulovať so stringom. Máš text, ktorý chceš upraviť, napríklad každé druhé písmeno chceš dať veľkým písmenom. Každé prvé bude malým. Máš takúto metódu v Stringu? Nie. Teda nie je možné zavolať napríklad: "Lorem ipsum dolor sit amet,...

Kotlin funkcie

Ak je funkcia vo vnútri triedy, tak sa označuje ako metóda alebo member funkcia – ale je to v podstate jedno. Začíname so slovom fun. Potom ide názov a nasledujú argumenty. Ak metóda nič nevracia, tak na pozadí vracia typ Unit. Ak metóda vracia nejakú...

Kotlin triedy a konštruktory

Trieda slúži na opis a výrobu objektov. Skúsme porozmýšľať nad reálnym objektom – napríklad auto. Ak chceme opísať auto do programu, tak na opis auta použijeme triedu. Čo má auto? Aké vlastnosti? Má počet dverí, značku, ečv, objem kufra a ďalších xy vecí. Nie...

Kotlin range

Range ako názov hovorí je rozpätie hodnôt. V tomto článku sa pozrieme na to ako Kotlin pracuje s range. Poďme sa pozrieť na príklady. Použitie v podmienke: if (i in 1..4) { // equivalent of 1 <= i && i <= 4 print(i) } Prechádzanie cez hodnoty rangu:...

Kotlin dátové typy

Java a Kotlin sú zameniteľné jazyky. Vieš ich obidva použiť v jednom programe, pretože nakoniec z nich bude .class súbor. Tým pádom typy, ktoré pozná Kotlin, pozná aj Java. Sú rozdiely, ktoré už vieš. Nevieš napísať typ int, ale vieš ho používať...

Kotlin String templates

Pri vypisovaní textu často ku textu pridávame hodnoty z premenných. Spájanie Stringov vieme spraviť pomocou + kde pospájame hodnoty a Stringy: for((i, v) in mena.withIndex()){ print("" + i + " " + v + "\n") } Kotlin ale má krajšiu cestu: for((i, v) in...

Kotlin for cyklus

Cyklus alebo loop znamená, že niečo sa opakuje xy krát. Možno prechádzame čísla od 1 do 100, alebo prechádzame cez elementy v poli alebo liste. V tomto článku sa dozvieš ako použiť for cyklus. Predstav si, že chceš vypísať čísla od 0 do 10. Použijeme for cyklus...

Kotlin polia

Pole je zoskupenie jeden a viac prvkov. Na vytvorenie poľa použijeme funkciu arrayOf. Do pola môžeme dať hodnoty rôzneho typu. val mena = arrayOf("Jaro", "Peter"); val rozne = arrayOf("Jaro", 10, Osoba("Tomas", "145878/8787"), false, "Peter"); Aj miešame typy...

Kotlin when

Predstav si, že napíšeš aplikáciu, kde používateľ bude čítať dáta z konzoly, ak niečo zadá, tak sa má niečo vykonať, ak zadá niečo iné, tak sa vykoná niečo iné. Napríklad budeš mať aplikáciu, kde používateľ bude vyberať smer kade má ísť. Ak napíše SEVER, tak na...

Kotlin podmienky if a if else

V tomto článku sa naučíš, čo je to podmienka a ako ju požiť. Poďme na to a poďme sa naučiť Kotlin podmienky if a if else. Základom každého algoritmu je podmienka. Ak niečo, tak niečo, alebo niečo iné. Napríklad ideš kúpiť vajíčka do obchodu: Je obchod otvorený? Ak...

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

Share This

Páčil sa ti článok? Zváž zdieľanie. Ďakujeme.