Sobes.tech
Junior

Come funzionano le classi dati in Kotlin?

sobes.tech AI

Risposta dell'AI

Le classi dati in Kotlin vengono utilizzate per memorizzare i dati. Il compilatore genera automaticamente i metodi standard:

  • equals(): Confronta le istanze in base ai valori delle loro proprietà.
  • hashCode(): Genera un codice hash basato sui valori delle proprietà.
  • toString(): Restituisce una rappresentazione in stringa che include i nomi e i valori di tutte le proprietà.
  • copy(): Crea una copia dell'oggetto, modificando se necessario i valori delle proprietà indicate.
  • componentN(): Metodi per la destrutturazione (scomposizione dell'oggetto in proprietà individuali).
// Esempio di classe dati
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // true
    println(user1 == user3) // false

    // toString()
    println(user1.toString()) // User(name=Alice, age=30)

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() e destrutturazione
    val (name, age) = user1
    println("Nome: $name, Età: $age") // Nome: Alice, Età: 30
}

Punti chiave:

  • Tutte le proprietà definite nel costruttore principale devono essere val o var.
  • La classe di dati non può essere abstract, open, sealed o inner.
  • Le classi di dati possono ereditare altre classi o implementare interfacce.
  • Le proprietà dichiarate fuori dal costruttore principale non partecipano alla generazione dei metodi standard.
Metodo Descrizione
equals() Confronta le proprietà del costruttore principale.
hashCode() Genera un hash basato sulle proprietà del costruttore principale.
toString() Mostra una rappresentazione in stringa delle proprietà del costruttore principale.
copy() Crea una copia superficiale con la possibilità di modificare le proprietà.
componentN() Accede alle proprietà in ordine di dichiarazione nel costruttore.

Le classi di dati semplificano notevolmente il lavoro con POJO (Plain Old Java Object) o DTO (Data Transfer Object), riducendo il codice boilerplate.