„Kotlin“ operatoriaus perkrova (su pavyzdžiais)

Turinys

Š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+bvirsta 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 operatorraktiniu žodžiu, kad kompiliatorius galėtų pasakyti, kad +operatorius yra perkrautas.

Išraiška p1 + p2paverčiama p1.plus(p2)po gaubtu.

Pavyzdys: - Operatoriaus perkrova

Šiame pavyzdyje išmoksite perkrauti --operatorių. Išraiška --apaverč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.

Įdomios straipsniai...