Kotlin Academy · Lektion

copy og equals

Genererede funktioner

Lektion 2 af 413 trin

copy og equals er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Genererede funktioner

Ud over toString genererer en dataklasse equals, hashCode og copy.

Disse tre funktioner gør dataklasser nemme at sammenligne og klone.

Strukturel lighed

Den genererede equals sammenligner objekter ud fra deres egenskabsværdier, ikke deres identitet.

To instanser af en dataklasse med de samme værdier er ens 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)
}

Forskellige værdier er ikke ens

Hvis du ændrer en egenskab, er objekterne ikke længere ens.

Ligheden beregnes ud fra hver egenskab i den primære konstruktør.

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

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

Lighed kontra identitet

Brug == til lighed efter værdi (strukturel lighed) og === til referencelighed (identitet).

To ens dataobjekter kan være forskellige instanser i hukommelsen.

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, så den passer med equals: ens objekter giver samme hashværdi.

Det er det, der får dataklasser til at fungere korrekt i mængder og som nøgler i kort.

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())
}

Funktionen copy

copy opretter et nyt objekt, der er identisk med originalen.

Med uforanderlige val-egenskaber er kopiering måden, du opretter en ændret version 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 ændringer

Giv navngivne argumenter til copy for at ændre bestemte egenskaber og beholde resten.

Det er standardmønsteret til opdatering af 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 lader originalen være intakt

copy ændrer aldrig kildeobjektet. Originalen beholder sine værdier.

Denne uforanderlighed gør tilstandsændringer forudsigelige og sikre.

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)
}

Kædning af kopier

Fordi copy returnerer et nyt objekt, kan du anvende flere opdateringer efter hinanden.

Hvert trin producerer en ny, uafhængig værdi.

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)
}

Kun egenskaber i konstruktøren tæller

Ligesom ved lighed håndterer copy kun egenskaber i den primære konstruktør.

Egenskaber i klassens krop nulstilles til deres standardværdier i kopien, så placér vigtig 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
}

Samlet overblik

De genererede funktioner giver dataklasser deres styrke:

  • equals og == sammenligner efter værdi
  • hashCode forbliver konsistent med equals
  • copy opretter en kopi med valgfri ændringer
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)
}

Hurtigt tjek

Test din forståelse af copy og equals.

Opsummering

Du har lært de genererede funktioner i dataklasser:

  • equals sammenligner efter værdi, == kontra ===
  • hashCode forbliver konsistent i samlinger
  • copy opretter en kopi med udvalgte ændringer

Nu skal du lære, hvordan destrukturering pakker objekter ud i variable.

Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “copy og equals” gratis?

Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “copy og equals”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “copy og equals”?

Genererede funktioner Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Kotlin Academy?

Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “copy og equals”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?

Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Deklaration af data classes
  2. copy og equals
  3. Destrukturerende deklarationer
  4. Data classes i collections
← Tilbage til Kotlin Academy