Kotlin Academy · Lektion

Operatorfunktioner

Överlagra plus, minus med mera

Lektion 1 av 413 steg

Operatorfunktioner är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Vad är operatoröverlagring?

Operatoröverlagring låter Era typer reagera på symboler som + eller -. Ni definierar en funktion med modifieraren operator och ett särskilt namn.

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))
}

Nyckelordet operator

Modifieraren operator talar om för kompilatorn att funktionen implementerar en operator. Utan den skulle anropet a + b inte fungera.

data class Money(val amount: Int) {
    operator fun plus(o: Money) = Money(amount + o.amount)
}

fun main() {
    println(Money(5) + Money(3))
}

Konventionella namn

Varje operator motsvarar ett fast funktionsnamn: plus för +, minus för -, times för *, div för /, rem för %.

data class Vec(val n: Int) {
    operator fun times(k: Int) = Vec(n * k)
}

fun main() {
    println(Vec(4) * 3)
}

Minus och gånger

Ni kan definiera flera operatorer för samma typ.

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ära operatorer

Unärt minus använder unaryMinus; unärt plus använder unaryPlus; not implementerar operatorn !.

data class Temp(val c: Int) {
    operator fun unaryMinus() = Temp(-c)
}

fun main() {
    println(-Temp(10))
}

Inkrement och dekrement

inc implementerar ++ och dec implementerar --. De returnerar ett nytt värde av samma typ.

data class Counter(val n: Int) {
    operator fun inc() = Counter(n + 1)
}

fun main() {
    var c = Counter(0)
    c++
    println(c.n)
}

Sammansatt tilldelning

plusAssign implementerar += för föränderliga mottagare. Om endast plus finns tilldelar += i stället ett nytt värde till variabeln.

class Bag {
    val items = mutableListOf<String>()
    operator fun plusAssign(item: String) { items.add(item) }
}

fun main() {
    val bag = Bag()
    bag += "apple"
    println(bag.items)
}

Operatorer med olika typer

Parametertypen behöver inte matcha mottagaren. Här skalar en punkt med en Int och returnerar en 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)
}

Som extension-funktioner

Operatorer kan definieras som extension-funktioner, även för typer som Ni inte äger.

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))
}

Kedja operatorer

Överlagrade operatorer kan kombineras på samma sätt som inbyggda operatorer och följer normal operatorprioritet.

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)
}

Returtyper är valfria

En operator kan returnera vilken typ som helst, men om den returnerar samma typ blir användningen intuitiv och lätt att kedja.

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))
}

Snabbtest

Testa era kunskaper om operatorfunktioner.

Sammanfattning

Ni har lärt er om operatorfunktioner:

  • Markera funktioner med operator och ett konventionellt namn (plus, minus, times, ...).
  • Unära operatorer, inkrement, dekrement och sammansatt tilldelning stöds.
  • Operatorer kan vara medlemmar eller extension-funktioner.
  • Om returtypen är densamma blir kedjning intuitiv.
data class P(val x: Int) {
    operator fun plus(o: P) = P(x + o.x)
}

fun main() {
    println((P(2) + P(3)).x)
}
Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Operatorfunktioner” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Operatorfunktioner”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Operatorfunktioner”?

Överlagra plus, minus med mera Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?

Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Operatorfunktioner”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?

Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Operatorfunktioner
  2. Jämförelseoperatorer
  3. Indexering och invoke
  4. Bästa praxis
← Tillbaka till Kotlin Academy