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:
equalse==confrontano per valorehashCoderimane coerente con equalscopyclona 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.