Best practices
Houd operatoren intuïtief
Best practices is een gratis Kotlin Academy-les op CoddyKit. Dit is les 4 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.
Houd operators intuïtief
Overload een operator alleen wanneer de betekenis ervan duidelijk is. + voor vectoren is logisch; + met de betekenis ‘een e-mail versturen’ niet.
data class Vec(val x: Int, val y: Int) {
operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}
fun main() {
println(Vec(1, 2) + Vec(3, 4))
}Behoud de verwachte semantiek
Houd je aan de gebruikelijke algebra: a + b moet voor symmetrische typen aanvoelen alsof de volgorde niet uitmaakt en mag lezers niet verrassen.
data class Money(val cents: Int) {
operator fun plus(o: Money) = Money(cents + o.cents)
}
fun main() {
println(Money(100) + Money(50))
}Geef de voorkeur aan onveranderlijkheid
Operators zoals plus moeten een nieuwe waarde retourneren in plaats van de ontvanger te wijzigen, net als bij getallen.
data class Point(val x: Int) {
operator fun plus(o: Point) = Point(x + o.x)
}
fun main() {
val a = Point(1)
val b = a + Point(2)
println("${a.x} ${b.x}")
}plus versus plusAssign
Definieer plus voor onveranderlijke waarden en plusAssign voor het rechtstreeks wijzigen van veranderlijke containers. Vermijd het definiëren van beide met tegenstrijdig gedrag.
class Cart {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val c = Cart()
c += "book"
println(c.items)
}Laat retourtypen overeenkomen
Retourneer bij binaire operators hetzelfde type, zodat resultaten natuurlijk kunnen worden gekoppeld.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
}
fun main() {
println((N(1) + N(2) + N(3)).v)
}Overload niet om slim te lijken
Gebruik een functie met een naam als die duidelijker leest. Operators zijn bedoeld voor echt numerieke semantiek of semantiek van containers, niet voor raadsels.
data class Log(val lines: List<String>) {
fun append(line: String) = Log(lines + line)
}
fun main() {
println(Log(emptyList()).append("start").lines)
}Houd equals en hashCode consistent
Als je vergelijking of gelijkheid overloadt, houd dan equals en hashCode synchroon om kapotte verzamelingen te voorkomen.
data class Id(val v: Int)
fun main() {
val set = hashSetOf(Id(1), Id(1))
println(set.size)
}Let op de prioriteit van operators
Overloadde operators behouden de ingebouwde prioriteit. Ontwerp ze zo dat de natuurlijke prioriteit verwachte resultaten oplevert.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
operator fun times(o: N) = N(v * o.v)
}
fun main() {
println((N(2) + N(3) * N(4)).v)
}Documenteer verrassende operators
Als een operator iets doet wat niet vanzelf spreekt, voeg dan commentaar of KDoc toe, zodat aanroepers niet op het verkeerde been worden gezet.
data class Range2(val start: Int, val end: Int) {
// contains: is value inside the range?
operator fun contains(v: Int) = v in start..end
}
fun main() {
println(5 in Range2(1, 10))
}Gebruik contains voor in
De operator in wordt gekoppeld aan contains. Overschrijf deze alleen wanneer lidmaatschap voor jouw type goed gedefinieerd is.
class Team(val members: List<String>) {
operator fun contains(name: String) = name in members
}
fun main() {
val t = Team(listOf("Ann", "Bo"))
println("Ann" in t)
}Gebruik bij twijfel een functie
Een duidelijk benoemde methode is bijna altijd veiliger dan een obscure operator. Bewaar overloading voor situaties waarin het de leesbaarheid echt verbetert.
data class Temperature(val c: Int) {
fun warmerThan(o: Temperature) = c > o.c
}
fun main() {
println(Temperature(30).warmerThan(Temperature(20)))
}Korte controle
Test je begrip van aanbevolen werkwijzen voor operatoroverloading.
Samenvatting
Je hebt de aanbevolen werkwijzen voor operatoroverloading geleerd:
- Overload alleen wanneer de betekenis duidelijk en gebruikelijk is.
- Geef de voorkeur aan onveranderlijke resultaten van hetzelfde type; zorg dat resultaten kunnen worden gekoppeld.
- Houd
plus(waarde) gescheiden vanplusAssign(wijziging). - Houd
equals/hashCodeconsistent; geef de voorkeur aan functies met een naam als die duidelijker zijn.
data class V(val x: Int) {
operator fun plus(o: V) = V(x + o.x)
}
fun main() {
println((V(2) + V(5)).x)
}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 “Best practices” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Kotlin Academy, waaronder “Best practices”, 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 “Best practices”?
Houd operatoren intuïtief 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 4 van 4.
Hoe lang duurt de les “Best practices”?
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
- Operatorfuncties
- Vergelijkingsoperatoren
- Index en invoke
- Best practices