Študijné materiály

Dátové triedy (data class) sú triedy, ktoré slúžia primárne na uchovávanie dát. Kotlin nám automaticky vygeneruje užitočné funkcie ako toString, equals, hashCode, copy a componentN.

data class Person(val name: String, val age: Int)

fun main() {
    val p1 = Person("Janko", 25)
    val p2 = Person("Janko", 25)
    val p3 = p1.copy(age = 30)

    println(p1)               // Person(name=Janko, age=25)
    println(p1 == p2)         // true - porovnava podla hodnot
    println(p3)               // Person(name=Janko, age=30)
    println(p3.component1())  // Janko
    println(p3.component2())  // 30
}

Bez data by trieda Person mala len defaultné toString z Any, ktorý vypíše niečo ako Person@1a2b3c4d.

8.1.1 Destrukcia

Vďaka funkciám componentN vieme používať deštrukciu (destructuring):

data class Person(val name: String, val age: Int)

fun main() {
    val person = Person("Janko", 25)
    val (name, age) = person  // destrukcia

    println(name) // Janko
    println(age)  // 25
}

8.1.2 copy

Funkcia copy vytvorí novú kópiu objektu s možnosťou zmeniť niektoré atribúty:

data class Person(val name: String, val age: Int)

fun main() {
    val original = Person("Janko", 25)
    val older = original.copy(age = 26)
    val renamed = original.copy(name = "Fero")

    println(original) // Person(name=Janko, age=25)
    println(older)    // Person(name=Janko, age=26)
    println(renamed)  // Person(name=Fero, age=25)
}

Povinné atribúty (bez defaultnej hodnoty) musíme zadefinovať v primárnom konštruktore s val alebo var.

Úlohy

Úloha 1

Vytvor dátovú triedu Film s názvom, rokom a hodnotením a vypíš jej objekt.

Úloha 2

Vytvor kópiu filmu pomocou copy, v ktorej zmeníš iba hodnotenie, a porovnaj oba objekty.

Úloha 3

Pomocou deštrukcie získaj názov a rok z objektu Film a samostatne ich vypíš.