Kotlin Academy · Les

copy en equals

Gegenereerde functies

Les 2 van 413 stappen

copy en equals is een gratis Kotlin Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Kotlin Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Kotlin Academy bevat in totaal 4 lessen.

Gegenereerde functies

Naast toString genereert een dataklasse equals, hashCode en copy.

Deze drie maken dataklassen bijzonder geschikt om te vergelijken en te klonen.

Structurele gelijkheid

De gegenereerde functie equals vergelijkt objecten op basis van hun eigenschapswaarden, niet op basis van hun identiteit.

Twee instanties van een dataklasse met dezelfde waarden zijn gelijk met ==.

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

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

Verschillende waarden zijn niet gelijk

Als je een eigenschap wijzigt, zijn de objecten niet langer gelijk.

De gelijkheid wordt berekend op basis van elke eigenschap in de primaire constructor.

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

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

Gelijkheid versus identiteit

Gebruik == voor gelijkheid op basis van waarden (structurele gelijkheid) en === voor gelijkheid op basis van referenties (identiteit).

Twee gelijke data-objecten kunnen verschillende instanties in het geheugen zijn.

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
}

Consistente hashCode

hashCode wordt gegenereerd in overeenstemming met equals: gelijke objecten leveren dezelfde hash op.

Daardoor werken dataklassen correct in verzamelingen en als mapsleutels.

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

De functie copy

copy maakt een nieuw object dat identiek is aan het origineel.

Bij onveranderlijke val-eigenschappen is kopiëren de manier om een gewijzigde versie te maken.

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

Kopiëren met wijzigingen

Geef benoemde argumenten door aan copy om specifieke eigenschappen te wijzigen en de rest te behouden.

Dit is het standaardpatroon voor het bijwerken van onveranderlijke gegevens.

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 laat het origineel intact

copy wijzigt het bronobject nooit. Het origineel behoudt zijn waarden.

Door deze onveranderlijkheid zijn toestandswijzigingen voorspelbaar en veilig.

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

Kopieën aan elkaar koppelen

Omdat copy een nieuw object teruggeeft, kun je meerdere updates na elkaar uitvoeren.

Elke stap levert een nieuwe, onafhankelijke waarde op.

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

Alleen constructor-eigenschappen tellen mee

Net als bij gelijkheid verwerkt copy alleen eigenschappen van de primaire constructor.

Eigenschappen in de klassebody worden in de kopie teruggezet op hun standaardwaarden. Bewaar belangrijke toestand daarom in de constructor.

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
}

Alles samenbrengen

De gegenereerde functies geven dataklassen hun kracht:

  • equals en == vergelijken op basis van waarden
  • hashCode blijft in overeenstemming met equals
  • copy kloont met optionele wijzigingen
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)
}

Korte toets

Toets je begrip van copy en equals.

Samenvatting

Je hebt de gegenereerde functies van dataklassen geleerd:

  • equals vergelijkt op basis van waarden, == versus ===
  • hashCode blijft consistent voor verzamelingen
  • copy kloont met gerichte wijzigingen

Vervolgens leer je hoe destructurering objecten uitpakt naar variabelen.

Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “copy en equals” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Kotlin Academy, waaronder “copy en equals”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Kotlin Academy bevat in totaal 4 lessen.

Wat leer ik in “copy en equals”?

Gegenereerde functies Je oefent met Kotlin Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Kotlin Academy te beginnen?

Ervaring vooraf is niet nodig. Kotlin Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “copy en equals”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Kotlin Academy?

Ja. Elke les over Kotlin Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Dataklassen declareren
  2. copy en equals
  3. Destructurerende declaraties
  4. Dataklassen in collecties
← Terug naar Kotlin Academy