Преоптерећење оператера Котлин (са примерима)

Преглед садржаја

У овом чланку ћете научити о преоптерећењу оператора (дефинишите како оператор ради за кориснички дефинисане типове попут објеката) помоћу примера.

Када користите оператор у Котлину, позива се функција одговарајућег члана. На пример, израз се a+bпретвара у a.plus(b)испод хаубе.

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

Када покренете програм, излаз ће бити:

 15

У ствари, plus()функција је преоптерећена за рад са разним основним типовима Котлина и 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) 

Запамтите да,

 оператор фун дец () = Тачка (- к, --и)

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

 дец забаве оператора (): Тачка (повратна тачка (- к, --и))

Неколико важних тачака

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. За разлику од језика попут Сцале, само се одређени скуп оператора може преоптеретити у Котлину. Посетите страницу да бисте сазнали више о операторима који могу бити преоптерећени у Котлину и њиховим одговарајућим функцијама чланова.

Занимљиви Чланци...