0Pricing
Kotlin Academy · Lektion

inline-Funktionen: Lambda-Overhead vermeiden

Markieren Sie Funktionen als inline, um die Objekterstellung für Lambda-Parameter zu vermeiden.

inline-Funktionen: Lambda-Overhead vermeiden ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.

Was ist eine inline-Funktion?

Normalerweise wird eine an eine Funktion übergebene Lambda in eine anonyme Klasse kompiliert. Jeder Aufruf reserviert ein neues Objekt, was Speicher und Zeit kostet. Das Schlüsselwort inline weist den Compiler an, den Funktionskörper zu kopieren (ebenso wie seine Lambda-Argumente) und direkt an der Aufrufstelle einzufügen.

inline deklarieren

Fügen Sie den Modifizierer inline vor fun ein:

inline fun measureTime(block: () -> Unit): Long {
    val start = System.nanoTime()
    block()
    return System.nanoTime() - start
}

Wie der Compiler den Aufruf umschreibt

Ein Aufruf wie measureTime { doWork() } wird auf Bytecode-Ebene zum inline eingefügten Körper von measureTime – es wird niemals ein Lambda-Objekt reserviert.

Wann Sie inline verwenden

Verwenden Sie inline, wenn:

  • die Funktion einen oder mehrere Lambda-Parameter entgegennimmt
  • sie häufig in Hot Paths aufgerufen wird (engen Schleifen, Composables)
  • Sie reified-Typparameter benötigen (wird als Nächstes behandelt)

Beispiel für einen Performance-Benchmark

Ohne inline reserviert jeder Aufruf einer Funktion höherer Ordnung ein Lambda-Objekt. Mit inline sieht die JVM geradlinigen Code – keine Allokation, kein virtueller Dispatch.

inline fun repeat(n: Int, block: () -> Unit) {
    for (i in 0 until n) block()
}

Nicht-lokale Rückgaben

Ein wesentlicher Vorteil von inline-Funktionen: Die Lambda kann return verwenden, um die umgebende Funktion zu verlassen, nicht nur die Lambda. Dies wird als nicht-lokale Rückgabe bezeichnet.

inline fun forEach(list: List<Int>, block: (Int) -> Unit) {
    for (item in list) block(item)
}

fun findFirst(list: List<Int>): Int {
    forEach(list) { if (it > 5) return it }  // returns from findFirst
    return -1
}

Einschränkungen von inline

Inline-Funktionen können nicht in Variablen gespeichert oder als Objekte übergeben werden, da sie zur Laufzeit nicht als Entitäten erster Klasse existieren. Sie können f(::measureTime) nicht aufrufen, wenn f eine Funktionsreferenz mit dieser Signatur erwartet.

Collections-Pipelines inline ausführen

Die Standardbibliotheksfunktionen map, filter, forEach usw. sind alle inline. Deshalb erzeugt ihre Verkettung keine zusätzlichen Closure-Objekte pro Element.

val result = (1..1_000_000)
    .filter { it % 2 == 0 }   // inline
    .map { it * it }           // inline
    .take(10)

Abwägung bei der Codegröße

Jede Aufrufstelle erhält eine Kopie des inline eingefügten Codes. Wenn der Funktionskörper groß ist und von vielen Stellen aufgerufen wird, wächst die Bytecode-Größe. Bevorzugen Sie inline für kleine, häufig aufgerufene Lambdas.

Zusammenspiel mit companion und Top-Level

inline funktioniert bei Top-Level-Funktionen und Member-Funktionen. Es funktioniert nicht bei Properties oder Konstruktoren. Die Funktion muss an der Aufrufstelle sichtbar sein (normalerweise public oder internal).

Beispiele aus der Standardbibliothek

Funktionen, die Sie bereits kennen und die inline sind: let, run, apply, also, with, use, synchronized, lazy (Blockvariante). Der Modifizierer inline sorgt dafür, dass ihre Lambdas ohne zusätzliche Kosten ausgeführt werden.

Kurzer Check

Was ist der wichtigste Vorteil davon, eine Funktion höherer Ordnung als inline zu markieren?

Zusammenfassung: inline-Funktionen

Die wichtigsten Punkte:

  • inline verhindert die Reservierung von Lambda-Objekten
  • ermöglicht nicht-lokale Rückgaben aus Lambdas
  • ist für reified-Typparameter erforderlich
  • eignet sich am besten für kleine, häufig aufgerufene Funktionen höherer Ordnung
  • die Scope-Funktionen der Standardbibliothek sind alle inline

Häufig gestellte Fragen

Ist die Lektion „inline-Funktionen: Lambda-Overhead vermeiden“ kostenlos?

Ja — der vollständige Text von „inline-Funktionen: Lambda-Overhead vermeiden“ 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 „inline-Funktionen: Lambda-Overhead vermeiden“?

Markieren Sie Funktionen als inline, um die Objekterstellung für Lambda-Parameter zu vermeiden. 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 1 von 4.

Wie lange dauert die Lektion „inline-Funktionen: Lambda-Overhead vermeiden“?

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. inline-Funktionen: Lambda-Overhead vermeiden
  2. noinline- und crossinline-Modifier
  3. Reifizierte Typparameter: Auf T zur Laufzeit zugreifen
  4. Praktische reified-Muster: Parsing, DI und Serialisierung
← Zurück zu Kotlin Academy