Index und Invoke
get, set und invoke
Index und Invoke ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Der Indexoperator
Durch die Definition von operator fun get können Sie die Klammersyntax zum Lesen verwenden: obj[i].
class Row(val cells: List<String>) {
operator fun get(i: Int) = cells[i]
}
fun main() {
val r = Row(listOf("a", "b", "c"))
println(r[1])
}Mit set schreiben
operator fun set ermöglicht Zuweisungen: obj[i] = value. Der letzte Parameter ist der Wert.
class Grid {
private val data = IntArray(3)
operator fun get(i: Int) = data[i]
operator fun set(i: Int, value: Int) { data[i] = value }
}
fun main() {
val g = Grid()
g[0] = 42
println(g[0])
}Indizierung mit mehreren Argumenten
get und set können mehrere Indizes annehmen und eignen sich daher hervorragend für Matrizen.
class Matrix {
private val d = Array(2) { IntArray(2) }
operator fun get(r: Int, c: Int) = d[r][c]
operator fun set(r: Int, c: Int, v: Int) { d[r][c] = v }
}
fun main() {
val m = Matrix()
m[1, 1] = 9
println(m[1, 1])
}Indizierung mit Nicht-Int-Schlüsseln
Indexparameter können jeden Typ haben und dadurch einen mapähnlichen Zugriff ermöglichen.
class Settings {
private val map = mutableMapOf<String, String>()
operator fun get(key: String) = map[key]
operator fun set(key: String, value: String) { map[key] = value }
}
fun main() {
val s = Settings()
s["theme"] = "dark"
println(s["theme"])
}Der Invoke-Operator
Durch die Definition von operator fun invoke können Sie eine Instanz wie eine Funktion aufrufen: obj().
class Greeter(val name: String) {
operator fun invoke() = "Hello, $name"
}
fun main() {
val g = Greeter("Sam")
println(g())
}Invoke mit Argumenten
invoke kann Parameter annehmen, sodass sich das Objekt wie eine parametrisierte Funktion verhält.
class Multiplier(val factor: Int) {
operator fun invoke(x: Int) = x * factor
}
fun main() {
val triple = Multiplier(3)
println(triple(5))
}Zustandsbehaftete aufrufbare Objekte
Da das Objekt seinen Zustand speichert, kann invoke konfigurierbare Objekte erstellen, die sich wie Funktionen verhalten.
class Accumulator {
var total = 0
operator fun invoke(n: Int) { total += n }
}
fun main() {
val acc = Accumulator()
acc(5)
acc(10)
println(acc.total)
}Mehrere invoke-Überladungen
Sie können mehrere invoke-Überladungen mit unterschiedlichen Parametern deklarieren.
class Printer {
operator fun invoke(s: String) = println(s)
operator fun invoke(n: Int) = println("num: $n")
}
fun main() {
val p = Printer()
p("hi")
p(7)
}Indexzugriff in Ausdrücken
Indexzugriffe lassen sich natürlich mit anderen Operationen kombinieren.
class Scores(private val list: List<Int>) {
operator fun get(i: Int) = list[i]
}
fun main() {
val s = Scores(listOf(10, 20, 30))
println(s[0] + s[2])
}get und invoke kombinieren
Ein Typ kann sowohl Indexzugriffe als auch Aufrufe unterstützen und so eine ausdrucksstarke API bereitstellen.
class Lookup(private val data: Map<String, Int>) {
operator fun get(key: String) = data[key]
operator fun invoke() = data.size
}
fun main() {
val l = Lookup(mapOf("a" to 1))
println(l["a"])
println(l())
}So verwendet die Standardbibliothek diese Funktion
Der Ausdruck list[i] von List und map[key] von Map verwendet genau diese Operatoren. Ihre eigenen Typen können sich genauso natürlich verwenden lassen.
fun main() {
val list = listOf(1, 2, 3)
val map = mapOf("x" to 9)
println(list[0])
println(map["x"])
}Kurzer Test
Testen Sie Ihr Verständnis von Indexzugriffen und invoke.
Zusammenfassung
Sie haben Indexzugriffe und invoke gelernt:
getbildetobj[i]ab;setbildetobj[i] = vab.- Indexoperatoren unterstützen mehrere Schlüssel sowie Schlüssel, die nicht vom Typ Int sind.
- Mit
invokekönnen Instanzen wie Funktionen aufgerufen werden, mit oder ohne Argumente. - Die Standardkollektionen verwenden genau diese Operatoren.
class Box {
private val m = mutableMapOf<String, Int>()
operator fun get(k: String) = m[k]
operator fun set(k: String, v: Int) { m[k] = v }
}
fun main() {
val b = Box()
b["x"] = 5
println(b["x"])
}Häufig gestellte Fragen
Ist die Lektion „Index und Invoke“ kostenlos?
Ja — der vollständige Text von „Index und Invoke“ 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 „Index und Invoke“?
get, set und invoke 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 3 von 4.
Wie lange dauert die Lektion „Index und Invoke“?
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
- Operatorfunktionen
- Vergleichsoperatoren
- Index und Invoke
- Best Practices