copy og equals
Genererte funksjoner
copy og equals er en gratis leksjon i Kotlin Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kotlin Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Genererte funksjoner
Utover toString genererer en dataklasse equals, hashCode og copy.
Disse tre gjør dataklasser svært praktiske å sammenligne og klone.
Strukturell likhet
Den genererte equals-funksjonen sammenligner objekter ut fra egenskapsverdiene, ikke identiteten deres.
To dataklasseinstanser med samme verdier er like med ==.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = User("Alice", 30)
println(a == b)
}Ulike verdier er ikke like
Endre en hvilken som helst egenskap, så er objektene ikke lenger like.
Likheten beregnes ut fra alle egenskapene i primærkonstruktøren.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = User("Alice", 31)
println(a == b)
}Likhet kontra identitet
Bruk == for likhet (strukturell likhet) og === for referanselikhet (identitet).
To like dataobjekter kan være forskjellige instanser i minnet.
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
}Konsistent hashCode
hashCode genereres slik at den samsvarer med equals: like objekter gir samme hash.
Det er dette som gjør at dataklasser fungerer riktig i mengder og som nøkler i map.
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())
}copy-funksjonen
copy oppretter et nytt objekt som er identisk med originalen.
Med uforanderlige val-egenskaper er kopiering måten De lager en endret versjon på.
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 med endringer
Send navngitte argumenter til copy for å endre bestemte egenskaper og beholde resten.
Dette er standardmønsteret for å oppdatere uforanderlige data.
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 lar originalen være uendret
copy endrer aldri kildeobjektet. Originalen beholder verdiene sine.
Denne uforanderligheten gjør tilstandsendringer forutsigbare og trygge.
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)
}Lenke sammen kopier
Fordi copy returnerer et nytt objekt, kan De utføre flere oppdateringer i rekkefølge.
Hvert trinn produserer en ny, uavhengig verdi.
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)
}Bare egenskaper i konstruktøren teller
Akkurat som ved likhet håndterer copy bare egenskapene i primærkonstruktøren.
Egenskaper i klassekroppen tilbakestilles til standardverdiene i kopien, så behold viktig tilstand i konstruktøren.
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
}Slik henger det sammen
De genererte funksjonene gir dataklasser kraften deres:
equalsog==sammenligner etter verdihashCodeforblir konsistent med equalscopykloner med valgfrie endringer
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)
}Hurtigsjekk
Test forståelsen av copy og equals.
Oppsummering
De har lært om de genererte funksjonene i dataklasser:
- equals sammenligner etter verdi,
==kontra=== - hashCode forblir konsistent for samlinger
- copy kloner med utvalgte endringer
I neste del lærer De hvordan destrukturering pakker ut objekter til variabler.
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «copy og equals» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «copy og equals», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «copy og equals»?
Genererte funksjoner Du øver på Kotlin Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Kotlin Academy?
Ingen tidligere erfaring er nødvendig. Kotlin Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «copy og equals»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Kotlin Academy-leksjonen?
Ja. Alle Kotlin Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.