Kotlin-operatøroverbelastning (med eksempler)

Indholdsfortegnelse

I denne artikel lærer du om operatøroverbelastning (definer hvordan operatør fungerer for brugerdefinerede typer som objekter) ved hjælp af eksempler.

Når du bruger operator i Kotlin, kaldes den tilsvarende medlemsfunktion. Eksempelvis a+bomdannes udtryk til a.plus(b)under emhætten.

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

Når du kører programmet, vil output være:

 15

Faktisk er plus()funktionen overbelastet for at arbejde med forskellige Kotlin basistyper og String.

 // + operator for basistyper operator fun plus (andet: Byte): Int operator fun plus (andet: Short): Int operator fun plus (andet: Int): Int operator fun plus (andet: Long): Long operator fun plus (andet: Float): Float operator fun plus (other: Double): Double // for string concatenation operator fun String? .plus (other: Any?): String 

Du kan også definere, hvordan operatøren arbejder for objekter ved at overbelaste den tilsvarende funktion. For eksempel skal du definere, hvordan +operatøren arbejder for objekter ved hjælp af overbelastningsfunktion plus().

Eksempel: Overbelastning + operatør

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

Når du kører programmet, vil output være:

 sum = (5, 1)

Her er plus()funktionen markeret med operatornøgleord for at fortælle kompilatoren, at +operatøren overbelastes.

Udtrykket p1 + p2omdannes til p1.plus(p2)under hætten.

Eksempel: - Overbelastning af operatør

I dette eksempel lærer du at overbelaste --operatøren. Udtrykket --aomdannes til a.dec()under hætten.

Det dec()medlem Funktionen tager ikke nogen argumenter.

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

Når du kører programmet, vil udgangen være:

 punkt = (2, -9) 

Huske på, at,

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

svarer til

 operator fun dec (): Punkt (returpunkt (- x, --y))

Få vigtige punkter

1. Når du overbelaster operatører, skal du prøve at opretholde operatørens oprindelige ånd. For eksempel,

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

Selvom ovenstående program er teknisk korrekt, har vi brugt +operator til at trække tilsvarende egenskaber af to objekter, der gjorde programmet forvirrende.

2. I modsætning til sprog som Scala kan kun et specifikt sæt operatører overbelastes i Kotlin. Besøg siden for at lære om operatører, der kan overbelastes i Kotlin og deres tilsvarende medlemsfunktioner.

Interessante artikler...