Kotlin : le proprietà di una classe
Le proprietà di una classe in Kotlin è l’insieme delle variabili mutable (var) o immutable (val). Per accedere al valore della variabile variable della classe MyClass di cui abbiamo creato un’istanza myClass basta digitare myClass.variable.
Una proprietà mutable è caratterizzata da:
- keyword var : dichiara che la proprietà è mutable
- tipo : non necessario in quanto si può usare la type inference
- inizializzazione : necessaria se non si indica il tipo altrimenti si ha un errore di compilazione. Anche nel caso in cui si indica il tipo della proprietà l’inizializzazione è richiesta nel codice.
- getter : ovvero come accedere al dato. Se non indicato si usa il getter di default del tipo della proprietà
- setter : ovvero come scrivere il dato. Se non indicato si usa il settere di default del tipo della proprietà
Una proprietà immutable è caratterizzata da:
- keyword val: dichiara che la proprietà è immutable
- tipo : non necessario in quanto si può usare la type inference
- inizializzazione : necessaria se non si indica il tipo altrimenti si ha un errore di compilazione. Anche nel caso in cui si indica il tipo della proprietà l’inizializzazione è richiesta nel codice.
- getter : ovvero come accedere al dato. Se non indicato si usa il getter di default del tipo della proprietà
Un esempio di proprietà mutable completa di tutte le sue caratteristiche è:
var stringRepresentation: String
get() = this.toString()
set(value) {
setDataFromString(value)
}
mentre una proprietà immutable è:
val isEmpty: Boolean
get() = this.size == 0
In questo ultimo caso il tipo Boolean può essere omesso perché verrebe dedotto dal valore di ritorno del getter. Esiste anche in Kotlin la keyword const da anteporre a variabili immutable, top-level, di tipo String e con getter di default. L’inizializzazione di una proprietà successiva alla sua dichiarazione prevede di anteporre la keyword lateinit alla keyword var/val. Il metodo isInitialized permette di controllare se una proprietà è già inizializzata o meno, ad esempio:
if (foo::bar.isInitialized) {
println(foo.bar)
}
Come abbiamo visto nel paragrafo sull’editarietà, le proprietà possono anche essere ereditate.
Commenti recenti