Kotlin Academy · Les

Best practices

Houd operatoren intuïtief

Les 4 van 413 stappen

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 van plusAssign (wijziging).
  • Houd equals/hashCode consistent; 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)
}
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 “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

  1. Operatorfuncties
  2. Vergelijkingsoperatoren
  3. Index en invoke
  4. Best practices
← Terug naar Kotlin Academy