copy en equals
Gegenereerde functies
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:
equalsen==vergelijken op basis van waardenhashCodeblijft in overeenstemming met equalscopykloont 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.
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.