Operatorfunktionen
Überschreiben Sie plus, minus usw.
Operatorfunktionen 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 Operatorüberladung?
Operatorüberladung ermöglicht es Ihren Typen, auf Symbole wie + oder - zu reagieren. Sie definieren dazu eine Funktion mit dem Modifizierer operator und einem speziellen Namen.
data class Point(val x: Int, val y: Int) {
operator fun plus(o: Point) = Point(x + o.x, y + o.y)
}
fun main() {
println(Point(1, 2) + Point(3, 4))
}Das Schlüsselwort operator
Der Modifizierer operator teilt dem Compiler mit, dass diese Funktion hinter einem Operator steht. Ohne ihn würde der Aufruf a + b nicht funktionieren.
data class Money(val amount: Int) {
operator fun plus(o: Money) = Money(amount + o.amount)
}
fun main() {
println(Money(5) + Money(3))
}Konventionelle Namen
Jeder Operator ist einem festgelegten Funktionsnamen zugeordnet: plus für +, minus für -, times für *, div für / und rem für %.
data class Vec(val n: Int) {
operator fun times(k: Int) = Vec(n * k)
}
fun main() {
println(Vec(4) * 3)
}Minus und Times
Sie können mehrere Operatoren für denselben Typ definieren.
data class Point(val x: Int, val y: Int) {
operator fun minus(o: Point) = Point(x - o.x, y - o.y)
operator fun times(k: Int) = Point(x * k, y * k)
}
fun main() {
println(Point(5, 5) - Point(1, 2))
println(Point(2, 3) * 2)
}Unäre Operatoren
Das unäre Minus verwendet unaryMinus, das unäre Plus verwendet unaryPlus und not steht hinter dem Operator !.
data class Temp(val c: Int) {
operator fun unaryMinus() = Temp(-c)
}
fun main() {
println(-Temp(10))
}Inkrement und Dekrement
inc steht hinter ++ und dec hinter --. Beide geben einen neuen Wert desselben Typs zurück.
data class Counter(val n: Int) {
operator fun inc() = Counter(n + 1)
}
fun main() {
var c = Counter(0)
c++
println(c.n)
}Zusammengesetzte Zuweisung
plusAssign steht bei veränderlichen Receivern hinter +=. Wenn nur plus vorhanden ist, weist += der Variablen stattdessen einen neuen Wert zu.
class Bag {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val bag = Bag()
bag += "apple"
println(bag.items)
}Operatoren mit unterschiedlichen Typen
Der Parametertyp muss nicht mit dem Receiver übereinstimmen. Hier liefert die Skalierung eines Punkts mit einem Int wieder einen Punkt.
data class Size(val w: Int, val h: Int) {
operator fun times(factor: Int) = Size(w * factor, h * factor)
}
fun main() {
println(Size(2, 3) * 4)
}Als Erweiterungsfunktionen
Operatoren können als Erweiterungen definiert werden, auch für Typen, die Ihnen nicht gehören.
data class Point(val x: Int, val y: Int)
operator fun Point.plus(o: Point) = Point(x + o.x, y + o.y)
fun main() {
println(Point(1, 1) + Point(2, 2))
}Operatoren verketten
Überladene Operatoren lassen sich wie integrierte Operatoren kombinieren und beachten dabei die normale Rangfolge.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
operator fun times(o: N) = N(v * o.v)
}
fun main() {
val r = N(2) + N(3) * N(4)
println(r.v)
}Rückgabetypen sind frei wählbar
Ein Operator kann jeden Typ zurückgeben. Wenn Sie denselben Typ zurückgeben, bleibt die Verwendung jedoch intuitiv und verkettbar.
data class Vec(val x: Int, val y: Int) {
operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}
fun main() {
println(Vec(1, 2) + Vec(3, 4))
}Kurzer Test
Testen Sie Ihr Verständnis von Operatorfunktionen.
Zusammenfassung
Sie haben Operatorfunktionen kennengelernt:
- Markieren Sie Funktionen mit
operatorund einem konventionellen Namen (plus,minus,timesusw.). - Unäre Operatoren sowie Inkrement- und zusammengesetzte Zuweisungsoperatoren werden unterstützt.
- Operatoren können Member oder Erweiterungen sein.
- Die Rückgabe desselben Typs sorgt für eine intuitive Verkettung.
data class P(val x: Int) {
operator fun plus(o: P) = P(x + o.x)
}
fun main() {
println((P(2) + P(3)).x)
}Häufig gestellte Fragen
Ist die Lektion „Operatorfunktionen“ kostenlos?
Ja — der vollständige Text von „Operatorfunktionen“ 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 „Operatorfunktionen“?
Überschreiben Sie plus, minus usw. 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 „Operatorfunktionen“?
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