Přetížení operátora Kotlin (s příklady)

Obsah

V tomto článku se na příkladech dozvíte o přetížení operátoru (definujte, jak operátor pracuje pro typy definované uživatelem, jako jsou objekty).

Když použijete operátor v Kotlin, volá se jeho příslušná členská funkce. Například výraz se a+btransformuje na a.plus(b)pod kapotou.

 fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )

Když spustíte program, výstup bude:

 15

Ve skutečnosti je plus()funkce přetížená, aby fungovala s různými základními typy Kotlin a String.

 // + operátor pro základní typy operator fun plus (other: Byte): Int operator fun plus (other: Short): Int operator fun plus (other: Int): Int operator fun plus (other: Long): Long operator fun plus (other: Float): Float operator fun plus (other: Double): Double // for string concatenation operator fun String? .plus (other: Any?): String 

Můžete také definovat, jak operátor pracuje pro objekty, přetížením odpovídající funkce. Například musíte definovat, jak +operátor pracuje pro objekty přetížením plus()funkce.

Příklad: Přetížení + operátor

 fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) : Point ( return Point(x + p.x, y + p.y) ) )

Když spustíte program, výstup bude:

 součet = (5, 1)

Zde je plus()funkce označena operatorklíčovým slovem, které kompilátoru řekne, že +je operátor přetížen.

Výraz p1 + p2je transformován na p1.plus(p2)pod kapotou.

Příklad: - Přetížení operátora

V tomto příkladu se naučíte --operátor přetížení . Výraz --aje transformován na a.dec()pod kapotou.

dec()Členské funkce nemá žádné argumenty.

 fun main(args: Array) ( var point = Point(3, -8) --point println("point = ($(point.x), $(point.y))") ) class Point(var x: Int = 0, var y: Int = 10) ( operator fun dec() = Point(--x, --y) )

Když spustíte program, výstup bude:

 bod = (2, -9) 

Pamatuj si to,

 operátor fun dec () = Bod (- x, --y)

je ekvivalentní k

 operator fun dec (): Point (return Point (- x, --y))

Několik důležitých bodů

1. Když přetížíte operátory, měli byste se pokusit zachovat původní ducha operátora. Například,

 fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) = Point(x - p.x, y - p.y) )

Ačkoli výše uvedený program je technicky správný, použili jsme +operátor k odečtení odpovídajících vlastností dvou objektů, díky nimž byl program matoucí.

2. Na rozdíl od jazyků, jako je Scala, v Kotlin může být přetížena pouze určitá sada operátorů. Na stránce se dozvíte o operátorech, které lze v Kotlině přetížit, a o jejich odpovídajících členských funkcích.

Zajímavé články...