Wanneer gebruikt u welke
Afwegingen
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
infixvoor vloeiende, leesbare binaire aanroepen en DSL's. - Gebruik
tailrecvoor 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))
}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
- Infixfuncties
- DSL-achtige API's bouwen
- tailrec-functies
- Wanneer gebruikt u welke