Претоварване на оператора Kotlin (с примери)

Съдържание

В тази статия ще научите за претоварването на оператора (дефинирайте как операторът работи за дефинирани от потребителя типове като обекти) с помощта на примери.

Когато използвате оператор в Kotlin, се извиква функцията на съответния член. Например изразът се a+bпревръща в a.plus(b)под капака.

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

Когато стартирате програмата, изходът ще бъде:

 15

Всъщност plus()функцията е претоварена, за да работи с различни основни типове Kotlin и String.

 // + оператор за основни типове оператор fun plus (друго: Байт): Int оператор fun plus (друго: Кратко): Int оператор fun plus (друго: Int): Int оператор fun plus (друго: Long): Long operator fun plus (друго: Float): Float оператор забавно плюс (друго: Double): Double // за оператор за конкатенация на низове fun String? .plus (друго: Any?): String 

Можете също така да определите как операторът работи за обекти, като претовари съответната му функция. Например трябва да дефинирате как +операторът работи за обекти чрез plus()функция за претоварване .

Пример: Претоварване + Оператор

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

Когато стартирате програмата, изходът ще бъде:

 сума = (5, 1)

Тук plus()функцията е маркирана с operatorключова дума, за да каже на компилатора, че +операторът е претоварен.

Изразът p1 + p2се трансформира в p1.plus(p2)под капака.

Пример: - Претоварване на оператора

В този пример ще се научите да претоварвате --оператора. Изразът --aсе трансформира в a.dec()под капака.

Функцията dec()член не приема никакви аргументи.

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

Когато стартирате програмата, изходът ще бъде:

 точка = (2, -9) 

Не забравяйте, че,

 оператор забавно dec () = точка (- x, --y)

е еквивалентно на

 оператор забавно dec (): Точка (точка на връщане (- x, --y))

Малко важни точки

1. Когато претоварвате операторите, трябва да се опитате да запазите оригиналния дух на оператора. Например,

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

Въпреки че програмата по-горе е технически правилна, ние използвахме +оператор за изваждане на съответните свойства на два обекта, което направи програмата объркваща.

2. За разлика от езици като Scala, само определен набор от оператори може да бъде претоварен в Kotlin. Посетете страницата, за да научите за операторите, които могат да бъдат претоварени в Kotlin и съответните им функции за членове.

Интересни статии...