Kotlin-operatörsöverbelastning (med exempel)

Innehållsförteckning

I den här artikeln lär du dig om operatörsöverbelastning (definiera hur operatören fungerar för användardefinierade typer som objekt) med hjälp av exempel.

När du använder operatör i Kotlin kallas motsvarande medlemsfunktion. Exempelvis a+bförvandlas uttrycket till a.plus(b)under huven.

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

När du kör programmet blir resultatet:

 15

Faktum är att plus()funktionen är överbelastad för att fungera med olika Kotlin-bastyper och String.

 // + operatör för grundläggande typer operator fun plus (övrigt: Byte): Int operator fun plus (övrigt: Short): Int operator fun plus (övrigt: Int): Int operator fun plus (övrigt: Long): Long operator fun plus (övrigt: Float): Float operator fun plus (övrigt: Double): Double // för string concatenation operator fun String? .plus (other: Any?): String 

Du kan också definiera hur operatören arbetar för objekt genom att överbelasta dess motsvarande funktion. Du måste till exempel definiera hur +operatören arbetar för objekt genom överbelastningsfunktion plus().

Exempel: Överbelastning + 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ör programmet blir resultatet:

 summa = (5, 1)

Här plus()markeras funktionen med operatornyckelord för att berätta för kompilatorn att +operatören överbelastas.

Uttrycket p1 + p2förvandlas till p1.plus(p2)under huven.

Exempel: - Överbelastning av operatören

I det här exemplet lär du dig att överbelasta --operatören. Uttrycket --aförvandlas till a.dec()under huven.

Den dec()medlem fungerar inte vidta några argument.

 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ör programmet blir utgången:

 punkt = (2, -9) 

Kom ihåg det,

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

är ekvivalent med

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

Få viktiga punkter

1. När du överbelastar operatörer bör du försöka behålla operatörens ursprungliga anda. Till exempel,

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

Även om programmet ovan är tekniskt korrekt har vi använt +operator för att subtrahera motsvarande egenskaper för två objekt som gjorde programmet förvirrande.

2. Till skillnad från språk som Scala kan endast en viss uppsättning operatörer överbelastas i Kotlin. Besök sidan för att lära dig mer om operatörer som kan överbelastas i Kotlin och deras motsvarande medlemsfunktioner.

Intressanta artiklar...