Preťaženie operátora Kotlin (s príkladmi)

Obsah

V tomto článku sa pomocou príkladov dozviete o preťažení operátora (definujte, ako operátor pracuje pre typy definované používateľom, ako sú objekty).

Keď v Kotline použijete operátor, volá sa jeho príslušná členská funkcia. Napríklad výraz sa 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) )

Po spustení programu bude výstup:

 15

V skutočnosti je plus()funkcia preťažená pri práci s rôznymi základnými typmi Kotlin a String.

 // + operátor pre 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 tiež definovať, ako operátor pracuje pre objekty, preťažením príslušnej funkcie. Napríklad musíte definovať, ako +operátor pracuje pre objekty preťažením plus().

Príklad: preťaženie + 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) ) )

Po spustení programu bude výstup:

 suma = (5, 1)

Tu je plus()funkcia označená operatorkľúčovým slovom, ktoré informuje kompilátor o +preťažení operátora.

Výraz p1 + p2sa transformuje na p1.plus(p2)pod kapotou.

Príklad: - Preťaženie operátora

V tomto príklade sa naučíte preťažovať --operátora. Výraz --asa transformuje na a.dec()pod kapotou.

dec()Členské funkcia nemá žiadne 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) )

Keď spustíte program, výstup bude:

 bod = (2, -9) 

Zapamätaj si to,

 operator fun dec () = Bod (- x, --y)

je ekvivalentné k

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

Niekoľko dôležitých bodov

1. Pri preťažení obsluhy by ste sa mali pokúsiť zachovať pôvodného ducha obsluhy. Naprí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) )

Aj keď je vyššie uvedený program technicky správny, +na odčítanie zodpovedajúcich vlastností dvoch objektov sme použili operátor, ktorý spôsobil, že program bol zmätený.

2. Na rozdiel od jazykov, ako je Scala, v Kotline môže byť preťažená iba konkrétna skupina operátorov. Navštívte stránku a dozviete sa viac o operátoroch, ktorí môžu byť v Kotline preťažení, a o ich príslušných členských funkciách.

Zaujímavé články...