Kotlina operatora pārslodze (ar piemēriem)

Satura rādītājs

Šajā rakstā jūs uzzināsit par operatora pārslodzi (definējiet, kā operators darbojas lietotāja definētiem tipiem, piemēram, objektiem), izmantojot piemērus.

Kad Kotlinā izmantojat operatoru, tiek izsaukta tā atbilstošā dalībnieka funkcija. Piemēram, izteiksme a+bpārveidojas a.plus(b)zem pārsega.

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

Palaidot programmu, izeja būs:

 15

Patiesībā plus()funkcija ir pārslogota, lai strādātu ar dažādiem Kotlin pamata veidiem un String.

 // + operators pamata veidiem operators fun plus (cits: baits): Int operators fun plus (cits: īss): Int operators fun plus (cits: Int): Int operators fun plus (cits: garš): Long operator fun plus (cits: pludiņš): pludiņa operatora izklaide plus (cita: dubultā): dubultā // virkņu savienošanas operatora jautrībai String? .plus (cits: kāds?): virkne 

Varat arī definēt, kā operators darbojas objektiem, pārslogojot tam atbilstošo funkciju. Piemēram, jums ir jādefinē, kā +operators darbojas objektiem, pārslogojot plus()funkciju.

Piemērs: pārslodze + operators

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

Palaidot programmu, izeja būs:

 summa = (5, 1)

Šeit plus()funkcija ir atzīmēta ar operatoratslēgvārdu, lai kompilatoram pateiktu, ka +operators tiek pārslogots.

Izteiksme p1 + p2tiek pārveidota p1.plus(p2)zem pārsega.

Piemērs: - Operatora pārslodze

Šajā piemērā jūs iemācīsities pārslogot --operatoru. Izteiksme --atiek pārveidota a.dec()zem pārsega.

dec()Locekļa funkciju neveic nekādus argumentus.

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

Palaidot programmu, grupa būs:

 punkts = (2, -9) 

Atcerieties, ka,

 operators jautri dec () = punkts (- x, --y)

ir ekvivalents

 operatora jautrais dec (): punkts (atgriešanās punkts (- x, --y))

Daži svarīgi punkti

1. Pārslogojot operatorus, jums jācenšas saglabāt operatora sākotnējo garu. Piemēram,

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

Lai gan iepriekš minētā programma ir tehniski pareiza, mēs esam izmantojuši +operatoru, lai atņemtu atbilstošās divu objektu īpašības, kas programmu mulsināja.

2. Atšķirībā no tādām valodām kā Scala, Kotlīnā var pārslogot tikai noteiktu operatoru kopumu. Apmeklējiet lapu, lai uzzinātu par operatoriem, kurus Kotlinā var pārslogot, un viņu attiecīgajām dalībnieku funkcijām.

Interesanti raksti...