V tem članku boste s pomočjo primerov izvedeli več o preobremenitvi operaterja (določite, kako deluje operater za uporabniško določene tipe, kot so predmeti).
Ko v Kotlinu uporabljate operator, se pokliče funkcija ustreznega člana. Na primer, izraz se a+b
spremeni v a.plus(b)
pod pokrovom.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
Ko zaženete program, bo rezultat:
15.
Dejansko je plus()
funkcija preobremenjena za delo z različnimi osnovnimi vrstami Kotlin in String
.
// + operator za osnovne vrste operator plus plus (drugo: Byte): Int operator fun plus (drugo: Kratek): Int operator fun plus (drugo: Int): Int operator fun plus (drugo: Long): Long operator fun plus (drugo: Float): Float operator plus plus (drugo: Double): Double // za operaterja združevanja nizov fun String? .plus (other: Any?): String
Določite lahko tudi, kako operator deluje za predmete, tako da preobremenite njegovo ustrezno funkcijo. Na primer, določiti morate, kako +
operater deluje s predmeti s plus()
funkcijo preobremenitve .
Primer: Preobremenitev + operater
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) ) )
Ko zaženete program, bo rezultat:
vsota = (5, 1)
Tu je plus()
funkcija označena s operator
ključno besedo in sporoča prevajalniku, da je +
operater preobremenjen.
Izraz p1 + p2
se spremeni p1.plus(p2)
v pokrov motorja.
Primer: - Preobremenitev operaterja
V tem primeru se boste naučili preobremeniti --
operaterja. Izraz --a
se spremeni a.dec()
v pokrov motorja.
Funkcija dec()
člana ne sprejme nobenega argumenta.
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) )
Ko zaženete program, bo izhod:
točka = (2, -9)
Zapomni si to,
zabava operaterja dec () = Točka (- x, --y)
je enakovredno
zabava operaterja dec (): Točka (povratna točka (- x, --y))
Nekaj pomembnih točk
1. Ko preobremenite operaterje, poskusite ohraniti prvotni duh operaterja. Na primer
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) )
Čeprav je zgornji program tehnično pravilen, smo z +
operatorjem odšteli ustrezne lastnosti dveh predmetov, zaradi katerih je bil program zmeden.
2. Za razliko od jezikov, kot je Scala, je v Kotlinu mogoče preobremeniti le določen nabor operaterjev. Obiščite stran, če želite izvedeti več o operaterjih, ki jih je mogoče preobremeniti v Kotlinu, in njihovih ustreznih članskih funkcijah.