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.

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.