Kotlin Academy · leksjon

copy og equals

Genererte funksjoner

Leksjon 2 av 413 trinn

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:

  • equals og == sammenligner etter verdi
  • hashCode forblir konsistent med equals
  • copy kloner 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.

Gratis å komme i gang

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.

Alle leksjonene i dette kurset

  1. Deklarere dataklasser
  2. copy og equals
  3. Destrukturerende deklarasjoner
  4. Dataklasser i samlinger
← Tilbake til Kotlin Academy