Supraîncărcarea operatorului Kotlin (cu exemple)

Cuprins

În acest articol, veți afla despre supraîncărcarea operatorului (definiți cum funcționează operatorul pentru tipurile definite de utilizator, cum ar fi obiectele) cu ajutorul exemplelor.

Când utilizați operatorul în Kotlin, funcția de membru corespunzătoare este apelată. De exemplu, expresia se a+btransformă în a.plus(b)sub capotă.

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

Când rulați programul, ieșirea va fi:

 15

De fapt, plus()funcția este supraîncărcată pentru a funcționa cu diferite tipuri de bază Kotlin și String.

 // + operator pentru tipuri de bază operator fun plus (alt: Byte): Operator fun fun plus (alt: Scurt): Operator fun fun plus (alt: Int): Operator fun fun plus (alt: Long): Operator lung fun plus (altele: Float): operatorul plutitor fun plus (altele: Dublu): Dublu // pentru șirul de concatenare a șirului fun String? .plus (altele: Orice?): Șir 

De asemenea, puteți defini modul în care funcționează operatorul pentru obiecte prin supraîncărcarea funcției sale corespunzătoare. De exemplu, trebuie să definiți cum +funcționează operatorul pentru obiecte prin plus()funcția de supraîncărcare .

Exemplu: Suprasolicitare + Operator

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

Când rulați programul, ieșirea va fi:

 sumă = (5, 1)

Aici, plus()funcția este marcată cu operatorcuvânt cheie pentru a spune compilatorului că +operatorul este supraîncărcat.

Expresia p1 + p2este transformată în p1.plus(p2)sub capotă.

Exemplu: - Supraîncărcarea operatorului

În acest exemplu, veți învăța să supraîncărcați --operatorul. Expresia --aeste transformată în a.dec()sub capotă.

Funcția dec()membru nu ia niciun 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) )

Când rulați programul, ieșirea va fi:

 punct = (2, -9) 

Sa nu uiti asta,

 operator fun dec () = Punct (- x, --y)

este echivalent cu

 operator fun dec (): Punct (punct de retur (- x, --y))

Câteva puncte importante

1. Când supraîncărcați operatorii, ar trebui să încercați să mențineți spiritul original al operatorului. De exemplu,

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

Deși programul de mai sus este corect din punct de vedere tehnic, am folosit +operatorul pentru a scădea proprietățile corespunzătoare a două obiecte, ceea ce a făcut ca programul să fie confuz.

2. Spre deosebire de limbi precum Scala, doar un set specific de operatori poate fi supraîncărcat în Kotlin. Accesați pagina pentru a afla despre operatorii care pot fi supraîncărcați în Kotlin și despre funcțiile corespunzătoare ale acestora.

Articole interesante...