Overbelasting door Kotlin-operator (met voorbeelden)

Inhoudsopgave

In dit artikel leert u met behulp van voorbeelden over overbelasting van operators (definieer hoe de operator werkt voor door de gebruiker gedefinieerde typen zoals objecten).

Wanneer u de operator in Kotlin gebruikt, wordt de bijbehorende lidfunctie aangeroepen. Expressie a+btransformeert bijvoorbeeld naar a.plus(b)onder de motorkap.

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

Wanneer u het programma uitvoert, is de uitvoer:

 15

In feite is de plus()functie overbelast om met verschillende Kotlin-basistypen en String.

 // + operator voor basistypen 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 // voor string concatenation operator fun String? .plus (other: Any?): String 

U kunt ook definiëren hoe de operator voor objecten werkt door de bijbehorende functie te overbelasten. U moet bijvoorbeeld definiëren hoe de +operator voor objecten werkt door de overbelastingsfunctie plus().

Voorbeeld: overbelasting + operator

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

Wanneer u het programma uitvoert, is de uitvoer:

 som = (5, 1)

Hier is de plus()functie gemarkeerd met een operatortrefwoord om de compiler te vertellen dat de +operator overbelast wordt.

De uitdrukking p1 + p2wordt getransformeerd naar p1.plus(p2)onder de motorkap.

Voorbeeld: - Overbelasting door operator

In dit voorbeeld leert u de --operator overbelasten . De uitdrukking --awordt getransformeerd naar a.dec()onder de motorkap.

De dec()lidfunctie accepteert geen argumenten.

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

Wanneer u het programma uitvoert, is de output:

 punt = (2, -9) 

Onthoud dat,

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

is gelijk aan

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

Enkele belangrijke punten

1. Wanneer u operators overbelast, moet u proberen de oorspronkelijke geest van de operator te behouden. Bijvoorbeeld,

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

Hoewel het bovenstaande programma technisch correct is, hebben we de +operator gebruikt om de overeenkomstige eigenschappen van twee objecten af ​​te trekken, waardoor het programma verwarrend werd.

2. In tegenstelling tot talen zoals Scala, kan alleen een specifieke set operators worden overbelast in Kotlin. Bezoek de pagina voor meer informatie over operators die kunnen worden overbelast in Kotlin en hun bijbehorende ledenfuncties.

Interessante artikelen...