Študijné materiály

Kľúčové slovo this odkazuje na aktuálny objekt triedy. Používame ho keď chceme odlíšiť atribút triedy od parametra funkcie:

class Person {
    var name: String = ""

    fun setName(name: String) {
        this.name = name  // this.name = atribut triedy, name = parameter funkcie
    }
}

fun main() {
    val p = Person()
    p.setName("Janko")
    println(p.name) // Janko
}

Bez this by sme mali vždy parameter, nie atribút triedy - name = name by priradilo parameter sebe samému.

7.2.1 Tento problém riešime aj pri konštruktoroch

class Person(val name: String, var age: Int) {
    var email: String = ""

    constructor(name: String, age: Int, email: String) : this(name, age) {
        this.email = email  // this.email = atribut triedy
    }
}

7.2.2 Ďalšie použitie this

this môžeme použiť aj na reťazenie volaní (fluent API) alebo na predanie aktuálneho objektu:

class Builder {
    var value: Int = 0

    fun add(n: Int): Builder {
        value += n
        return this  // vratime tento objekt
    }

    fun build(): Int = value
}

fun main() {
    val result = Builder()
        .add(5)
        .add(3)
        .build()
    println(result) // 8
}

Úlohy

Úloha 1

Vytvor triedu Obdlznik s atribútmi sirka a vyska a metódou nastavRozmery, ktorá použije this.

Úloha 2

Doplň triedu Nastavenia o sekundárny konštruktor, v ktorom pomocou this priradíš parameter k atribútu.

Úloha 3

Vytvor builder s metódami pridaj a vynasob, ktoré vrátia this, a reťazovo ich zavolaj.