Kotlin Academy · Les

Wanneer gebruikt u welke

Afwegingen

Les 4 van 413 stappen

Wanneer gebruikt u welke 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.

Twee hulpmiddelen, verschillende taken

Infix-functies gaan over leesbaarheid; tailrec-functies gaan over veilige, efficiënte recursie. Ze lossen verschillende problemen op.

infix fun Int.add(o: Int) = this + o

tailrec fun sum(n: Int, acc: Int = 0): Int =
    if (n == 0) acc else sum(n - 1, acc + n)

fun main() {
    println(2 add 3)
    println(sum(10))
}

Kies infix voor vloeiende API's

Kies infix wanneer een aanroep beter leest zonder punten en haakjes, vooral in DSL's en bij het bouwen van paren.

fun main() {
    val pair = "id" to 100
    println(pair)
}

Kies tailrec voor diepe recursie

Gebruik tailrec wanneer een recursief algoritme zo diep kan recursief worden dat de stack overloopt.

tailrec fun count(n: Int, acc: Int = 0): Int =
    if (n == 0) acc else count(n - 1, acc + 1)

fun main() {
    println(count(50000))
}

Afwegingen bij infix

Infix verwijdert leestekens, wat de duidelijkheid voor lezers die er niet mee vertrouwd zijn kan verminderen en de prioriteit ingewikkelder maakt. Gebruik het alleen wanneer het duidelijk helpt.

infix fun Int.scaledBy(f: Int) = this * f

fun main() {
    println(5 scaledBy 3)
}

Afwegingen bij tailrec

Om code staartrecursief te maken, is vaak een accumulator nodig. Dat kan minder direct aanvoelen dan een gewone lus. Weeg expressiviteit af tegen eenvoud.

tailrec fun product(n: Int, acc: Long = 1): Long =
    if (n <= 1) acc else product(n - 1, acc * n)

fun main() {
    println(product(6))
}

Wanneer een lus eenvoudiger is

Als een gewone for- of while-lus duidelijker is dan staartrecursie, geef dan de voorkeur aan de lus. Recursie is een hulpmiddel, geen vereiste.

fun sumLoop(n: Int): Int {
    var total = 0
    for (i in 1..n) total += i
    return total
}

fun main() {
    println(sumLoop(10))
}

Wanneer een benoemde aanroep duidelijker is

Als een infixnaam niet duidelijk een binaire relatie aanduidt, brengt een normale methodeaanroep de bedoeling beter over.

data class Temp(val c: Int) {
    fun isWarmerThan(o: Temp) = c > o.c
}

fun main() {
    println(Temp(30).isWarmerThan(Temp(20)))
}

Beide combineren

De twee functies staan los van elkaar; één programma kan infix gebruiken voor leesbare aanroepen en tailrec voor veilige recursie.

infix fun Int.upto(n: Int) = (this..n).toList()

tailrec fun last(list: List<Int>): Int =
    if (list.size == 1) list[0] else last(list.drop(1))

fun main() {
    println(last(1 upto 5))
}

Checklist voor leesbaarheid

Vraag jezelf af: maakt infix de aanroep duidelijker voor een beginner? Voorkomt tailrec een reëel risico op stack overflow? Zo niet, geef dan de voorkeur aan gewone functies en lussen.

fun main() {
    val r = (1..5).sum()
    println(r)
}

Opmerking over prestaties

tailrec levert prestaties vergelijkbaar met die van een lus, met constante stackruimte. Infix heeft geen uitvoeringskosten; het is puur syntactisch.

tailrec fun pow(base: Int, exp: Int, acc: Long = 1): Long =
    if (exp == 0) acc else pow(base, exp - 1, acc * base)

fun main() {
    println(pow(2, 10))
}

Samenvatting van de keuze

Infix: vloeiende binaire aanroepen met één argument. Tailrec: recursie die veilig moet kunnen meegroeien. Geen van beide is de standaardkeuze; beide zijn bewuste keuzes.

infix fun String.joinWith(o: String) = "$this-$o"

fun main() {
    println("a" joinWith "b")
}

Korte controle

Test je begrip van wanneer je elke functie gebruikt.

Samenvatting

Je hebt geleerd wanneer je elke functie gebruikt:

  • Gebruik infix voor vloeiende, leesbare binaire aanroepen en DSL's.
  • Gebruik tailrec voor recursie die moet kunnen meegroeien zonder stack overflow.
  • Geef de voorkeur aan gewone lussen of functies met een naam als die duidelijker zijn.
  • De twee functies staan los van elkaar en kunnen worden gecombineerd.
infix fun Int.by(o: Int) = this * o
tailrec fun dec(n: Int): Int = if (n == 0) 0 else dec(n - 1)

fun main() {
    println(3 by 4)
    println(dec(1000))
}
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 “Wanneer gebruikt u welke” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Kotlin Academy, waaronder “Wanneer gebruikt u welke”, 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 “Wanneer gebruikt u welke”?

Afwegingen 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 “Wanneer gebruikt u welke”?

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. Infixfuncties
  2. DSL-achtige API's bouwen
  3. tailrec-functies
  4. Wanneer gebruikt u welke
← Terug naar Kotlin Academy