Kotlin Setter and Getter

Iniziamo con spiegare cos’è l’Incapsulamento e specificando che non è disponibile per Kotlin, ma ci aiuterà a capire l’uso di Setter e Getter

L’incapsulamento è uno dei principi fondamentali della programmazione orientata agli oggetti (OOP). Si basa sull’idea di nascondere i dettagli interni di un oggetto e fornire un’interfaccia controllata per interagire con esso.

🔹 Concetti chiave dell’incapsulamento

  1. Nascondere i dettagli interni
    • Gli attributi di una classe vengono dichiarati privati (private) per impedire l’accesso diretto dall’esterno.
    • In questo modo, si evita che altre parti del codice possano modificarli in modo inappropriato.
  2. Fornire metodi di accesso controllati
    • Si utilizzano getter e setter per leggere e modificare i valori in modo sicuro.
    • In Kotlin, si possono usare proprietà con get e set personalizzati.
  3. Migliorare la manutenibilità e la sicurezza
    • Il codice diventa più modulare e facile da gestire.
    • Se si vuole modificare il comportamento di un attributo, si può farlo nei metodi setter/getter senza influenzare il resto del programma.

Approfondiamo i metodi Set e Get

In Kotlin, getter e setter sono dei metodi speciali usati per leggere e modificare il valore di una proprietà di una classe. Questa operazione (per quanto banale) non è sempre possibile di seguito un elenco dei casi in cui non si puo modificare direttamente la proprietà di una classe

  • Quando vuoi modificate una variabile dichiarata private
  • Quando NON usi val o var nei parametri del costruttore (quando la definisci senza usando la nomenclatura _param)
  • Quando vuoi eseguire codice durante la lettura o la scrittura (è il caso piu comune, magari vuoi modificare una parametro ma devi prima effettuare delle verifiche )
  • Quando dichiari una proprietà con var o val, Kotlin crea automaticamente i metodi get e set:
    val crea solo un getter (è immutabile, quindi non ha setter).
    var crea sia getter che setter.
class Persona {
    var nome: String = "Mario" 
    // crea: getNome(), setNome(value)
}

In generale i vantaggi sono:

  • Sono importanti per la manutenzione del codice, sicurezza e stabilità
  • Kotlin implementa in maniera nativa l’incapsulamento, e questi metodi ti consentono di aggirare l’incapusulamento


    Si può procedere in due modi differenti, il primo è quello dei Set e Get, il secondo invece è quello di creare una variabile pubblica che espone la variabile dichiarata privata.
    il primo:

Per il secondo metodo, puoi utilizzare una proprietà con visibilità internalprotected, o public che espone la variabile private in modo controllato.(in pratica utilizzi un’altra variabile pubblica alla quale associ quella privata con set e get)

Attenzione quelli visti nel primo caso sono l’utilizzo di getter e setter pubblici mediante la definizioni di funzioni (come si fa in java) lo stesso risultato lo si può ottenere con i set e get in Kotlin Style e cioè:

class MyClass {
    var myPrivateVariable: Int = 0
        get() {
            // Puoi aggiungere logica qui se vuoi
            return field
        }
        set(value) {
            // Puoi fare controlli qui
            field = value
        }
}

class AnotherClass {
    fun accessPrivateVariable(myClass: MyClass) {
        val value = myClass.myPrivateVariable
        println("Valore della variabile: $value")
    }
}

Di seguito l’esempio del corso che restituisce 40 e che cmq è ancora diverso dai primi due casi:
class Person2(var name: String, age_param: Int, var height: Int) {

class Person2(var name: String, age_param: Int, var height: Int) {
var age = age_param
set(value) {
    if (value > 0)
        field = value
    else
        println("Something went wrong")
}

get() {
    return field +20
}

init {
    if (age_param <= 0)
        println("Something went wrong")
}

fun printData() {
    println("name : $name, age : $age, height : $height")
                }
}
fun main() {
    val myFriend = Person2("Marco", 20, 180)
    myFriend.age = 20
    println(myFriend.age)
    //myFriend.printData()
val myGirlfriend = Person2("Anna", 40, 160)
//myGirlfriend.printData()
}

Torna alla Lezione 1 Kotlin: Cosa sono le Classi

Di Admin

Lascia un commento

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