0Pricing
Kotlin Academy · Lektion

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:

  • get bildet obj[i] ab; set bildet obj[i] = v ab.
  • Indexoperatoren unterstützen mehrere Schlüssel sowie Schlüssel, die nicht vom Typ Int sind.
  • Mit invoke kö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

  1. Operatorfunktionen
  2. Vergleichsoperatoren
  3. Index und Invoke
  4. Best Practices
← Zurück zu Kotlin Academy