Wann Sie welche verwenden
Abwägungen
Wann Sie welche verwenden ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Zwei Werkzeuge, unterschiedliche Aufgaben
Infix-Funktionen dienen der Lesbarkeit; tailrec-Funktionen dienen der sicheren, effizienten Rekursion. Sie lösen unterschiedliche Probleme.
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))
}Infix für flüssig lesbare APIs wählen
Verwenden Sie Infix, wenn ein Aufruf ohne Punkte und Klammern besser lesbar ist, insbesondere in DSLs und beim Erstellen von Pairs.
fun main() {
val pair = "id" to 100
println(pair)
}tailrec für tiefe Rekursion wählen
Verwenden Sie tailrec, wenn ein rekursiver Algorithmus so tief rekursieren könnte, dass ein Stacküberlauf entsteht.
tailrec fun count(n: Int, acc: Int = 0): Int =
if (n == 0) acc else count(n - 1, acc + 1)
fun main() {
println(count(50000))
}Abwägungen bei Infix
Infix-Funktionen entfernen Satzzeichen, was die Verständlichkeit für unerfahrene Leser verringern und die Vorrangregeln komplizierter machen kann. Verwenden Sie sie nur, wenn sie eindeutig helfen.
infix fun Int.scaledBy(f: Int) = this * f
fun main() {
println(5 scaledBy 3)
}Abwägungen bei tailrec
Um Code tailrekursiv zu machen, ist häufig ein Akkumulator erforderlich, wodurch der Code weniger direkt wirken kann als eine einfache Schleife. Wägen Sie Ausdrucksstärke gegen Einfachheit ab.
tailrec fun product(n: Int, acc: Long = 1): Long =
if (n <= 1) acc else product(n - 1, acc * n)
fun main() {
println(product(6))
}Wann eine Schleife einfacher ist
Wenn eine einfache for- oder while-Schleife klarer ist als Tail-Rekursion, bevorzugen Sie die Schleife. Rekursion ist ein Werkzeug, keine Pflicht.
fun sumLoop(n: Int): Int {
var total = 0
for (i in 1..n) total += i
return total
}
fun main() {
println(sumLoop(10))
}Wann ein benannter Aufruf klarer ist
Wenn ein Infix-Name nicht offensichtlich eine binäre Beziehung bezeichnet, vermittelt ein normaler Methodenaufruf die Absicht besser.
data class Temp(val c: Int) {
fun isWarmerThan(o: Temp) = c > o.c
}
fun main() {
println(Temp(30).isWarmerThan(Temp(20)))
}Beides kombinieren
Die beiden Funktionen sind unabhängig voneinander. Ein einzelnes Programm kann Infix für gut lesbare Aufrufe und tailrec für sichere Rekursion verwenden.
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))
}Checkliste zur Lesbarkeit
Fragen Sie sich: Macht Infix den Aufruf für Einsteiger klarer? Verhindert tailrec ein tatsächliches Stacküberlauf-Risiko? Falls nicht, bevorzugen Sie einfache Funktionen und Schleifen.
fun main() {
val r = (1..5).sum()
println(r)
}Hinweis zur Leistung
tailrec bietet eine schleifenähnliche Leistung mit konstantem Stack-Speicher. Infix verursacht keine Laufzeitkosten, sondern ist rein syntaktisch.
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))
}Zusammenfassung der Entscheidung
Infix: flüssig lesbare Aufrufe im Binärstil mit einem Argument. Tailrec: Rekursion, die sicher skalieren muss. Keine der beiden Funktionen ist eine Standardeinstellung; beide sollten bewusst gewählt werden.
infix fun String.joinWith(o: String) = "$this-$o"
fun main() {
println("a" joinWith "b")
}Kurzer Test
Testen Sie Ihr Verständnis davon, wann Sie die jeweilige Funktion verwenden sollten.
Zusammenfassung
Sie haben gelernt, wann Sie welche Funktion verwenden sollten:
- Verwenden Sie
infixfür flüssig lesbare Aufrufe im Binärstil und DSLs. - Verwenden Sie
tailrecfür Rekursion, die ohne Stacküberlauf skalieren muss. - Bevorzugen Sie einfache Schleifen oder benannte Funktionen, wenn diese klarer sind.
- Die beiden Funktionen sind unabhängig voneinander und können kombiniert werden.
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))
}Lerne Kotlin mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 51
- Lektionen
- 203
Häufig gestellte Fragen
Ist die Lektion „Wann Sie welche verwenden“ kostenlos?
Ja — der vollständige Text von „Wann Sie welche verwenden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Wann Sie welche verwenden“?
Abwägungen Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Wann Sie welche verwenden“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Infix-Funktionen
- DSL-ähnliche APIs erstellen
- tailrec-Funktionen
- Wann Sie welche verwenden