Kotlin-operatøroverbelastning (med eksempler)

Innholdsfortegnelse

I denne artikkelen vil du lære om operatøroverbelastning (definere hvordan operatør fungerer for brukerdefinerte typer som objekter) ved hjelp av eksempler.

Når du bruker operator i Kotlin, kalles den tilsvarende medlemsfunksjonen. For eksempel a+bforvandles uttrykk til a.plus(b)under panseret.

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

Når du kjører programmet, vil utdataene være:

 15

Faktisk er plus()funksjonen overbelastet for å fungere med forskjellige Kotlin-basistyper og String.

 // + operator for grunnleggende typer operator moro pluss (annet: Byte): Int operator moro pluss (annet: Short): Int operator moro pluss (annet: Int): Int operator moro pluss (annet: Long): Long operator fun plus (annet: 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 jobber for objekter ved å overbelaste den tilhørende funksjonen. For eksempel må du definere hvordan +operatøren jobber for objekter ved hjelp av overbelastningsfunksjon 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 kjører programmet, vil utdataene være:

 sum = (5, 1)

Her er plus()funksjonen merket med operatornøkkelord for å fortelle kompilatoren at +operatøren blir overbelastet.

Uttrykket p1 + p2forvandles til p1.plus(p2)under panseret.

Eksempel: - Overbelastning av operatør

I dette eksemplet vil du lære å overbelaste --operatøren. Uttrykket --aforvandles til a.dec()under panseret.

Den dec()medlemsfunksjon tar ikke noen 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 kjører programmet, vil utgangen være:

 punkt = (2, -9) 

Husk at,

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

tilsvarer

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

Få viktige poeng

1. Når du overbelaster operatører, bør du prøve å opprettholde operatørens opprinnelige å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) )

Selv om programmet ovenfor er teknisk riktig, har vi brukt +operator for å trekke tilsvarende egenskaper til to objekter som gjorde programmet forvirrende.

2. I motsetning til språk som Scala, kan bare et bestemt sett med operatører overbelastes i Kotlin. Besøk siden for å lære om operatører som kan bli overbelastet i Kotlin og deres tilhørende medlemsfunksjoner.

Interessante artikler...