Når hver av dem bør brukes
Avveininger
Når hver av dem bør brukes er en gratis leksjon i Kotlin Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kotlin Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
To verktøy med ulike oppgaver
Infix-funksjoner handler om lesbarhet, mens tailrec-funksjoner handler om trygg og effektiv rekursjon. De løser urelaterte problemer.
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))
}Velg infix for flytende API-er
Velg infix når et kall blir lettere å lese uten punktum og parenteser, særlig i DSL-er og ved bygging av par.
fun main() {
val pair = "id" to 100
println(pair)
}Velg tailrec for dyp rekursjon
Bruk tailrec når en rekursiv algoritme kan bli så dyp at den fører til stakkoverflyt.
tailrec fun count(n: Int, acc: Int = 0): Int =
if (n == 0) acc else count(n - 1, acc + 1)
fun main() {
println(count(50000))
}Avveininger ved infix
Infix fjerner tegnsetting, noe som kan gjøre koden mindre tydelig for uerfarne lesere og komplisere presedensen. Bruk det bare når det tydelig hjelper.
infix fun Int.scaledBy(f: Int) = this * f
fun main() {
println(5 scaledBy 3)
}Avveininger ved tailrec
Å gjøre kode halerekursiv krever ofte en akkumulator, noe som kan føles mindre direkte enn en vanlig løkke. Vei uttrykksfullhet mot enkelhet.
tailrec fun product(n: Int, acc: Long = 1): Long =
if (n <= 1) acc else product(n - 1, acc * n)
fun main() {
println(product(6))
}Når en løkke er enklere
Hvis en vanlig for- eller while-løkke er tydeligere enn halerekursjon, bør du foretrekke løkken. Rekursjon er et verktøy, ikke et krav.
fun sumLoop(n: Int): Int {
var total = 0
for (i in 1..n) total += i
return total
}
fun main() {
println(sumLoop(10))
}Når et navngitt kall er tydeligere
Hvis et infix-navn ikke åpenbart uttrykker en binær relasjon, kommuniserer et vanlig metodekall hensikten bedre.
data class Temp(val c: Int) {
fun isWarmerThan(o: Temp) = c > o.c
}
fun main() {
println(Temp(30).isWarmerThan(Temp(20)))
}Kombinere begge
De to funksjonene er uavhengige. Ett program kan bruke infix for lesbare kall og tailrec for trygg rekursjon.
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))
}Sjekkliste for lesbarhet
Spør deg selv: Gjør infix kallet tydeligere for en nybegynner? Forhindrer tailrec en reell risiko for stakkoverflyt? Hvis ikke, bør du foretrekke vanlige funksjoner og løkker.
fun main() {
val r = (1..5).sum()
println(r)
}Ytelsesmerknad
tailrec gir løkkelignende ytelse med konstant stakkplass. Infix har ingen kjøretidskostnad; det er utelukkende syntaktisk.
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))
}Beslutningssammendrag
Infix: flytende kall i binær stil med ett argument. Tailrec: rekursjon som må kunne skaleres trygt. Ingen av delene er et standardvalg; begge bør brukes bevisst.
infix fun String.joinWith(o: String) = "$this-$o"
fun main() {
println("a" joinWith "b")
}Kort sjekk
Test forståelsen din av når du bør bruke de ulike funksjonene.
Oppsummering
Du har lært når du bør bruke de ulike funksjonene:
- Bruk
infixfor flytende, lesbare kall i binær stil og for DSL-er. - Bruk
tailrecfor rekursjon som må kunne skaleres uten stakkoverflyt. - Foretrekk vanlige løkker eller navngitte funksjoner når de er tydeligere.
- De to funksjonene er uavhengige og kan kombineres.
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))
}Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Når hver av dem bør brukes» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «Når hver av dem bør brukes», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Når hver av dem bør brukes»?
Avveininger Du øver på Kotlin Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Kotlin Academy?
Ingen tidligere erfaring er nødvendig. Kotlin Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Når hver av dem bør brukes»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Kotlin Academy-leksjonen?
Ja. Alle Kotlin Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Infix-funksjoner
- Bygge DSL-lignende API-er
- tailrec-funksjoner
- Når hver av dem bør brukes