Šiame straipsnyje, naudodamiesi pavyzdžiais, sužinosite apie operatoriaus perkrovą (apibrėžkite, kaip operatorius veikia naudotojo apibrėžtus tipus, pvz., Objektus).
Kai naudojate operatorių Kotlin, iškviečiama jo atitinkama nario funkcija. Pavyzdžiui, išraiška a+b
virsta a.plus(b)
po gaubtu.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
Kai paleisite programą, išvestis bus:
15
Tiesą sakant, plus()
funkcija yra perkrauta dirbti su įvairiais pagrindiniais „Kotlin“ tipais ir String
.
// + pagrindinių tipų operatorius „operatorius plius“ (kitas: baitas): „Vidutinis operatoriaus linksmas pliusas“ (kitas: trumpas): „Int operatoriaus linksmas pliusas“ (kitas: „Int“): „Int operatoriaus linksmas pliusas“ (kitas: ilgas): ilgas operatoriaus linksmas plius (kita: plūduriuojanti): plūduriuojančio operatoriaus linksmybė plius (kita: dviguba): dviguba // styginių sujungimo operatoriaus pramogoms String? .plus (kita: bet kokia?): stygos
Taip pat galite apibrėžti, kaip operatorius veikia su objektais, perkrausdamas atitinkamą funkciją. Pvz., Jums reikia apibrėžti, kaip +
operatorius veikia su objektais, perkraunant plus()
funkciją.
Pavyzdys: perkrova + operatorius
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) ) )
Kai paleisite programą, išvestis bus:
suma = (5, 1)
Čia plus()
funkcija pažymėta operator
raktiniu žodžiu, kad kompiliatorius galėtų pasakyti, kad +
operatorius yra perkrautas.
Išraiška p1 + p2
paverčiama p1.plus(p2)
po gaubtu.
Pavyzdys: - Operatoriaus perkrova
Šiame pavyzdyje išmoksite perkrauti --
operatorių. Išraiška --a
paverčiama a.dec()
po gaubtu.
dec()
Narys funkcija nesiima jokių 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) )
Kai paleisite programą, bus:
taškas = (2, -9)
Prisiminti, kad,
operatoriaus linksmas dec () = taškas (- x, --y)
yra lygiavertis
operatoriaus linksmas dec (): taškas (grįžimo taškas (- x, --y))
Nedaug svarbių punktų
1. Kai perkraunate operatorius, turėtumėte stengtis išlaikyti pirminę operatoriaus dvasią. Pavyzdžiui,
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) )
Nors aukščiau pateikta programa yra techniškai teisinga, mes naudojome +
operatorių, kad atimtume atitinkamas dviejų objektų savybes, dėl kurių programa buvo paini.
2. Skirtingai nuo tokių kalbų kaip „Scala“, Kotline gali būti perkrautas tik tam tikras operatorių rinkinys. Apsilankykite puslapyje ir sužinokite apie operatorius, kurie gali būti perkrauti „Kotlin“, ir jų atitinkamas narių funkcijas.