0Pricing
Kotlin Academy · Lektion

Extension Properties und berechnete Extensions

Fügen Sie bestehenden Klassen berechnete Properties hinzu, ohne sie zu erweitern.

Extension Properties und berechnete Extensions ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Extension Properties

Extension Properties fügen bestehenden Typen berechnete Eigenschaften hinzu, ohne sie zu unterklassen. Sie besitzen kein Backing Field.

Schreibgeschützte Extension Property

Definieren Sie einen Getter, um eine berechnete Extension Property zu erstellen.
val String.wordCount: Int
    get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount)  // 3

Veränderliche Extension Property

Definieren Sie sowohl einen Getter als auch einen Setter für eine les- und schreibbare Extension Property.
var MutableList<Int>.first: Int
    get() = this[0]
    set(value) { this[0] = value }
val list = mutableListOf(1, 2, 3)
list.first = 10
println(list)  // [10, 2, 3]

Kein Backing Field

Extension Properties können keine Backing Fields besitzen. Sie werden immer aus dem vorhandenen Zustand berechnet.
// ERROR: extension property cannot have backing field
// var String.cache: String = ""  // NOT allowed!

// OK: computed only:
val String.isPalindrome: Boolean
    get() = this == this.reversed()

Extension Properties für Collections

Fügen Sie Collection-Typen praktische Eigenschaften hinzu.
val <T> List<T>.secondOrNull: T?
    get() = if (size >= 2) this[1] else null
val <T> List<T>.isNotNullOrEmpty: Boolean
    get() = isNotEmpty()
println(listOf(1, 2, 3).secondOrNull)  // 2

Boolesche Extension Properties

Erstellen Sie gut lesbare boolesche Eigenschaften für Typprüfungen.
val Any.isString: Boolean get() = this is String
val String.hasDigits: Boolean get() = any { it.isDigit() }
val Int.isPositive: Boolean get() = this > 0
println(42.isPositive)        // true
println("abc123".hasDigits)   // true

Extension Properties vs. Extension Functions

Verwenden Sie eine Property, wenn die Berechnung einfach ist und eine Eigenschaft des Objekts darstellt. Verwenden Sie eine Function, wenn sie Parameter oder Seiteneffekte hat.
// Property: stateless, simple characteristic
val String.isEmail: Boolean get() = '@' in this
// Function: has parameters
fun String.padCenter(width: Int) = padStart((length + width) / 2)

Ein Companion Object erweitern

Fügen Sie Companion Objects Extension Properties hinzu.
data class Color(val r: Int, val g: Int, val b: Int) {
    companion object
}
val Color.Companion.RED get() = Color(255, 0, 0)
val Color.Companion.WHITE get() = Color(255, 255, 255)
println(Color.RED)  // Color(r=255, g=0, b=0)

Kontextabhängige Extension Properties

Extension Properties, die innerhalb einer Klasse definiert sind, gelten nur innerhalb des Gültigkeitsbereichs dieser Klasse.
class Formatter {
    val Int.formatted: String
        get() = "%,d".format(this)
    fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000))  // 1,000,000

Extensions für DSLs verwenden

Extension Properties sind grundlegend für das Design von Kotlin-DSLs.
val Int.dp: Float get() = this * 2.5f
val Float.sp: Float get() = this * 1.0f
// In DSL context:
view.setPadding(16.dp.toInt())

Generische Extension Properties

Extension Properties können Typparameter besitzen.
val <T> List<T>.head: T?
    get() = firstOrNull()
val <T> List<T>.tail: List<T>
    get() = drop(1)
println(listOf(1,2,3).head)  // 1
println(listOf(1,2,3).tail)  // [2, 3]

Kurztest

Können Extension Properties in Kotlin Backing Fields besitzen?

Zusammenfassung

Extension Properties fügen Typen berechnete Eigenschaften ohne Backing Fields hinzu. Verwenden Sie sie für einfache, zustandslose Berechnungen. Veränderliche Extension Properties können Setter besitzen. Sie eignen sich hervorragend für DSLs und Fluent APIs. Als Nächstes: Extensions mit Gültigkeitsbereich und Companion Extensions!

Häufig gestellte Fragen

Ist die Lektion „Extension Properties und berechnete Extensions“ kostenlos?

Ja — der vollständige Text von „Extension Properties und berechnete Extensions“ 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 Properties und berechnete Extensions“?

Fügen Sie bestehenden Klassen berechnete Properties hinzu, ohne sie zu erweitern. 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 2 von 4.

Wie lange dauert die Lektion „Extension Properties und berechnete Extensions“?

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