Il riferimento this
Abbiamo già visto nell'arco di questa lezione la keyword this. Ma precisamente cos'è? Il riferimento this in Kotlin viene utilizzato per fare riferimento, all’interno di un metodo, di una proprietà o di un costruttore, agli attributi o metodi locali (dell'istanza di una classe). Questo tipo di riferimento non fa altro che puntare all’oggetto a cui appartiene risolvendo possibili problemi di ambiguità. Vediamo subito un esempio:
class Persona {
private lateinit var nome: String = null
fun setNome(nome_pers: String) {
nome = nome_pers
}
}
In questo caso non possiamo chiamare il parametro di setNome() con nome perché già c’è la variabile di istanza nome, invece con il riferimento this potremo scrivere:
class Persona {
private lateinit var nome: String = null
fun setNome(nome: String) {
this.nome = nome
}
}
Altri campi di utilizzo di this
Naturalmente è possibile usare this anche per richiamare metodi e proprietà:
fun helloN() = "hello n"
class A {
fun m() {
println("hello m")
}
fun n() {
var m = helloM()
println(m)
m() // richiamo la funzione helloN() al posto di A.m() !
this.m() // richiamo A.m()
}
}
L’uso fondamentale del riferimento this è con le classi in quanto viene utilizzato quando si vuole fare riferimento al proprio oggetto di appartenenza. Vediamo un uso esclusivo ci questo riferimento con i costruttori:
class Persona {
private lateinit var nome: String
private lateinit var cognome: String
init {
println("Sono il costruttore di default.")
}
constructor(nome: String) : this() {
this.nome = nome
}// Chiama il costruttore senza parametri
constructor(nome: String, cognome: String) : this(nome) {
this.cognome = cognome
}// Chiama il costruttore con un parametro
}
Avendo il seguente codice: Persona("Giustino", "Rossi")
verrà chiamato il costruttore con due parametri in ingresso, il quale a sua volta chiamerà il costruttore con un solo parametro, che infine chiamerà il costruttore senza parametri e stamperà:
Sono il costruttore di default.
Quando viene utilizzato il riferimento this(…), questo deve trovarsi sempre come prima linea all’interno di un metodo.
https://kotlinlang.org/docs/reference/
https://www.mattepuffo.com/blog/categoria/21-kotlin/0.html
http://www.programming.raskrjal.net/kotlin2/