0Pricing
Kotlin Academy · Lektion

Extension Functions: Syntax und Dispatch-Regeln

Schreiben Sie Extension Functions und verstehen Sie die Semantik des statischen Dispatch.

Extension Functions: Syntax und Dispatch-Regeln 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 sind Extension Functions?

Extension Functions ermöglichen es Ihnen, bestehenden Klassen neue Funktionen hinzuzufügen, ohne sie zu verändern oder Vererbung zu verwenden.

Grundlegende Syntax von Extension Functions

Stellen Sie dem Funktionsnamen den Typ voran, den Sie erweitern. Dieser wird als „Receiver-Typ“ bezeichnet.
fun String.shout(): String = uppercase() + "!"
println("hello".shout())  // HELLO!
fun Int.isEven() = this % 2 == 0
println(4.isEven())  // true

this in Extensions

Innerhalb einer Extension Function verweist „this“ auf das Receiver-Objekt.
fun List<Int>.secondOrNull(): Int? {
    return if (size >= 2) this[1] else null
}
println(listOf(10, 20, 30).secondOrNull())  // 20
println(listOf(5).secondOrNull())           // null

Statisches Dispatching: Extensions werden nicht überschrieben

Extension Functions werden zur Kompilierzeit anhand des deklarierten Typs statisch aufgelöst — sie sind NICHT virtuell.
open class Base
class Child : Base()
fun Base.greet() = "Hello from Base"
fun Child.greet() = "Hello from Child"

val obj: Base = Child()
println(obj.greet())  // "Hello from Base" (static dispatch!)

Extensions vs. Member Functions

Wenn eine Klasse eine Member Function mit derselben Signatur wie eine Extension besitzt, hat die Member Function immer Vorrang.
class Greeter {
    fun hello() = "member hello"
}
fun Greeter.hello() = "extension hello"  // shadowed!
println(Greeter().hello())  // "member hello"

Extensions für Nullable-Receiver

Sie können Nullable-Typen erweitern. Behandeln Sie darin null mit Prüfungen wie „this == null“.
fun String?.orEmpty() = this ?: ""
fun Any?.toStringSafe() = this?.toString() ?: "null"
println(null.orEmpty())  // ""
println(42.toStringSafe())  // "42"

Sichtbarkeit und Gültigkeitsbereich

Extensions können auf oberster Ebene (global), in einer Klasse (Member Extensions) oder in einer Datei definiert werden. Sie folgen den normalen Sichtbarkeitsregeln.
// Top-level extension:
fun List<String>.joinUppercase() = joinToString { it.uppercase() }
// Private to file:
private fun String.clean() = trim().lowercase()

Extension Functions für Companion Objects

Fügen Sie einem Companion Object Extensions hinzu, um den Namespace auf Klassenebene zu erweitern.
class User(val name: String) {
    companion object
}
fun User.Companion.guest() = User("Guest")
val guest = User.guest()

Extensions für Standardbibliothekstypen

Erweitern Sie jeden Typ — auch integrierte Typen.
fun Double.roundTo(decimals: Int): Double {
    val factor = Math.pow(10.0, decimals.toDouble())
    return Math.round(this * factor) / factor
}
println(3.14159.roundTo(2))  // 3.14

Extensions organisieren

Gruppieren Sie Extensions für einen Typ in einer eigenen Datei, z. B. StringExtensions.kt oder DateExtensions.kt.
// StringExtensions.kt
fun String.titleCase() = split(" ")
    .joinToString(" ") {
        it.replaceFirstChar { c -> c.uppercase() }
    }
println("hello world".titleCase())  // Hello World

Extensions können nicht auf private Member zugreifen

Extensions haben nur Zugriff auf öffentliche und interne Member — nicht auf private oder geschützte.
class Secret {
    private val key = "hidden"
    val name = "public"
}
fun Secret.reveal() {
    println(name)  // OK
    // println(key)  // Error: key is private
}

Kurztest

Wenn eine Member Function einer Klasse und eine Extension Function dieselbe Signatur haben, welche wird aufgerufen?

Zusammenfassung

Extension Functions fügen jeder Klasse Verhalten hinzu, ohne sie zu verändern. Sie werden statisch aufgelöst (kein Überschreiben). Member haben Vorrang vor Extensions. Verwenden Sie Nullable-Receiver für null-sichere Hilfsfunktionen. Als Nächstes: Extension Properties!

Häufig gestellte Fragen

Ist die Lektion „Extension Functions: Syntax und Dispatch-Regeln“ kostenlos?

Ja — der vollständige Text von „Extension Functions: Syntax und Dispatch-Regeln“ 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 „Extension Functions: Syntax und Dispatch-Regeln“?

Schreiben Sie Extension Functions und verstehen Sie die Semantik des statischen Dispatch. 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 „Extension Functions: Syntax und Dispatch-Regeln“?

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. Extension Functions: Syntax und Dispatch-Regeln
  2. Extension Properties und berechnete Extensions
  3. Scoped Extensions und Companion Extensions
  4. Praktische Extensions: Context-, View- und String-Hilfsfunktionen
← Zurück zu Kotlin Academy