Kotlin Academy · Lektion

Wann Sie welche verwenden

Abwägungen

Lektion 4 von 413 Schritte

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 infix für flüssig lesbare Aufrufe im Binärstil und DSLs.
  • Verwenden Sie tailrec fü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))
}
Kostenlos starten

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

  1. Infix-Funktionen
  2. DSL-ähnliche APIs erstellen
  3. tailrec-Funktionen
  4. Wann Sie welche verwenden
← Zurück zu Kotlin Academy