0Pricing
Kotlin Academy · Lezione

copy ed equals

Funzioni generate

copy ed equals è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Funzioni generate

Oltre a toString, una data class genera equals, hashCode e copy.

Queste tre funzioni rendono le data class ideali per confrontare e clonare oggetti.

Uguaglianza strutturale

La funzione equals generata confronta gli oggetti in base ai valori delle proprietà, non alla loro identità.

Due istanze di una data class con gli stessi valori risultano uguali con ==.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 30)
    println(a == b)
}

Valori diversi non sono uguali

Se cambia una proprietà qualsiasi, gli oggetti non sono più uguali.

L'uguaglianza viene calcolata usando tutte le proprietà del costruttore primario.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 31)
    println(a == b)
}

Uguaglianza e identità

Usi == per l'uguaglianza per valore, o strutturale, e === per l'uguaglianza per riferimento, o identità.

Due oggetti dati uguali possono essere istanze diverse in memoria.

data class User(val name: String)

fun main() {
    val a = User("Alice")
    val b = User("Alice")
    println(a == b)  // values match
    println(a === b) // different instances
}

hashCode coerente

hashCode viene generato in modo coerente con equals: gli oggetti uguali producono lo stesso hash.

È questo che fa funzionare correttamente le data class negli insiemi e come chiavi di mappe.

data class Point(val x: Int, val y: Int)

fun main() {
    val a = Point(1, 2)
    val b = Point(1, 2)
    println(a.hashCode() == b.hashCode())
}

La funzione copy

copy crea un nuovo oggetto identico all'originale.

Con proprietà val immutabili, la copia è il modo per creare una versione modificata.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = a.copy()
    println(b)
    println(a == b)
}

copy con modifiche

Passi argomenti denominati a copy per modificare proprietà specifiche mantenendo invariate le altre.

Questo è il modello standard per aggiornare dati immutabili.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val older = a.copy(age = 31)
    println(a)
    println(older)
}

copy lascia intatto l'originale

copy non modifica mai l'oggetto sorgente. L'originale conserva i propri valori.

Questa immutabilità rende i cambiamenti di stato prevedibili e sicuri.

data class Account(val owner: String, val balance: Int)

fun main() {
    val original = Account("Sam", 100)
    val updated = original.copy(balance = 150)
    println(original.balance)
    println(updated.balance)
}

Concatenare le copie

Poiché copy restituisce un nuovo oggetto, può applicare diversi aggiornamenti in sequenza.

Ogni passaggio produce un valore nuovo e indipendente.

data class Config(val volume: Int, val muted: Boolean)

fun main() {
    val base = Config(50, false)
    val result = base.copy(volume = 70).copy(muted = true)
    println(result)
}

Contano solo le proprietà del costruttore

Come per l'uguaglianza, copy gestisce solo le proprietà del costruttore primario.

Le proprietà del corpo vengono reimpostate sui valori predefiniti nella copia, quindi mantenga lo stato importante nel costruttore.

data class User(val name: String) {
    var note: String = "none"
}

fun main() {
    val a = User("Alice")
    a.note = "VIP"
    val b = a.copy()
    println(b.note) // back to default
}

Tutto insieme

Le funzioni generate conferiscono alle data class la loro potenza:

  • equals e == confrontano per valore
  • hashCode rimane coerente con equals
  • copy clona l'oggetto con modifiche facoltative
data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = a.copy(name = "Alicia")
    println(a == b)
    println(b)
}

Verifica rapida

Verifichi la comprensione di copy ed equals.

Riepilogo

Ha imparato a conoscere le funzioni generate delle data class:

  • equals confronta per valore, == rispetto a ===
  • hashCode rimane coerente nelle raccolte
  • copy clona l'oggetto applicando modifiche selettive

Successivamente imparerà come la destrutturazione suddivide gli oggetti in variabili.

Domande Frequenti

La lezione «copy ed equals» è gratuita?

Sì — il testo completo di «copy ed equals» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «copy ed equals»?

Funzioni generate Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «copy ed equals»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Dichiarazione delle data class
  2. copy ed equals
  3. Dichiarazioni destrutturate
  4. Data class nelle collezioni
← Torna a Kotlin Academy