Študijné materiály

Poďme sa pozrieť, ako sa triedy zapisujú v Kotline. Trieda sa definuje pomocou kľúčového slova class:

class Person {
    val name: String = "Janko"
    val age: Int = 25

    fun greet() {
        println("Ahoj, som $name a mam $age rokov")
    }
}

fun main() {
    val person = Person()
    println(person.name)   // Janko
    println(person.age)    // 25
    person.greet()         // Ahoj, som Janko a mam 25 rokov
}

Všimni si, že na rozdiel od C++ nemusíme písať Person() s prázdnymi zátvorkami, ale pre jednoduchosť to robíme.

V Kotline je všetko public (verejné) implicitne, takže nemusíme písať žiadne modifikátory prístupu. Prístup k členom triedy máme automaticky.

2.6.1 Konštruktory

Existuje viacero spôsobov, ako inicializovať atribúty triedy. Najčastejšie sa používa primárny konštruktor, ktorý sa zapisuje priamo v hlavičke triedy:

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

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

Toto je vlastne skrátený zápis pre triedu s atribútmi a konštruktorom. val znamená, že atribút je len na čítanie. Ak ho chceme meniť, použijeme var:

class Counter(var count: Int)

fun main() {
    val counter = Counter(0)
    counter.count = 5  // OK, lebo je var
    println(counter.count) // 5
}

Ak potrebujeme vykonať nejakú logiku pri inicializácii, použijeme blok init:

class Person(val name: String, var age: Int) {
    init {
        require(age >= 0) { "Vek nemoze byt zaporny" }
        println("Vytvorena osoba: $name, $age rokov")
    }
}

fun main() {
    val person = Person("Janko", 25)
    // Vytvorena osoba: Janko, 25 rokov
}

require je funkcia, ktorá vyhodí IllegalArgumentException ak je podmienka false.

Úlohy

Úloha 1

Vytvor triedu Student s atribútmi meno a ročník, metódou na výpis údajov a vytvor dva objekty.

Úloha 2

Vytvor triedu Pocitadlo s meniteľným atribútom a metódami zvys a vynuluj.

Úloha 3

Vytvor triedu Produkt s primárnym konštruktorom a v bloku init over, že cena nie je záporná.