Kotlini operaatori ülekoormus (koos näidetega)

Lang L: none (table-of-contents)

Selles artiklis saate näidete abil teada operaatori ülekoormamise kohta (määrake, kuidas operaator töötab kasutaja määratud tüüpide, näiteks objektide puhul).

Kui kasutate Kotlinis operaatorit, nimetatakse selle vastavat liikme funktsiooni. Näiteks a+bmuundub väljend a.plus(b)kapoti alla.

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

Programmi käivitamisel on väljund järgmine:

 15

Tegelikult on plus()funktsioon Kotlini põhitüüpidega töötamiseks ülekoormatud String.

 // + põhitüüpide operaator operaator lõbus pluss (muu: bait): keskmine operaatori lõbus pluss (muu: lühike): keskmine operaatori lõbus pluss (muu: keskmine): keskmine operaatori lõbus pluss (muu: pikk): pikk operaatori lõbus pluss (muu: ujuk): ujukioperaatori lõbus pluss (muu: kahekordne): kahekordne // stringide liitmise operaatori lõbuks String? .plus (muu: mõni?): string 

Samuti saate määratleda, kuidas operaator objektide puhul töötab, koormates selle vastavat funktsiooni. Näiteks peate funktsiooni +ülekoormamise abil määratlema, kuidas operaator objektide puhul plus()töötab.

Näide: ülekoormus + operaator

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

Programmi käivitamisel on väljund järgmine:

 summa = (5, 1)

Siin plus()tähistatakse funktsioon operatormärksõnaga, et öelda kompilaatorile, et +operaator on üle koormatud.

Väljend p1 + p2muudetakse p1.plus(p2)kapoti alla.

Näide: - Operaatori ülekoormus

Selles näites õpid --operaatorit ülekoormama . Väljend --amuudetakse a.dec()kapoti alla.

Funktsioon dec()liige ei võta ühtegi argumenti.

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

Programmi käivitamisel on järgmine valik:

 punkt = (2, -9) 

Mäleta seda,

 operaatori lõbus detsember () = punkt (- x, --y)

on samaväärne

 operaatori lõbus detsember (): punkt (tagasipöördumispunkt (- x, --y))

Vähesed olulised punktid

1. Operaatorite ülekoormamisel peaksite püüdma säilitada operaatori algset vaimu. Näiteks,

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

Ehkki ülaltoodud programm on tehniliselt õige, oleme +kahe operaatori abil lahutanud kahe objekti vastavad omadused, mis muutsid programmi segaseks.

2. Erinevalt sellistest keeltest nagu Scala, saab Kotlinis üle koormata ainult konkreetse operaatorite komplekti. Külastage lehte, et saada teavet operaatorite kohta, mida saab Kotlinis üle koormata, ja nende vastavaid liikme funktsioone.

Huvitavad Artiklid...