Preobremenitev operaterja Kotlin (z primeri)

Kazalo

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+bspremeni 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 operatorključno besedo in sporoča prevajalniku, da je +operater preobremenjen.

Izraz p1 + p2se spremeni p1.plus(p2)v pokrov motorja.

Primer: - Preobremenitev operaterja

V tem primeru se boste naučili preobremeniti --operaterja. Izraz --ase 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.

Zanimive Članki...