U ovom ćete članku naučiti o preopterećenju operatora (definirajte kako operator radi za korisnički definirane vrste poput objekata) uz pomoć primjera.
Kada u Kotlinu koristite operator, poziva se funkcija odgovarajućeg člana. Na primjer, izraz se a+b
pretvara u a.plus(b)
ispod haube.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
Kada pokrenete program, izlaz će biti:
15
U stvari, plus()
funkcija je preopterećena za rad s raznim osnovnim vrstama Kotlina i String
.
// + operator za osnovne tipove operator plus (ostalo: Bajt): Int operator fun plus (ostalo: Kratko): Int operator fun plus (ostalo: Int): Int operator fun plus (ostalo: Long): Long operator fun fun plus (ostalo: Float): Funkcija float operatora plus (ostalo: Double): Double // za zabavu operatora spajanja niza String? .plus (ostalo: Bilo koji?): String
Također možete definirati kako operator radi za objekte preopteretivši njegovu odgovarajuću funkciju. Na primjer, trebate definirati kako +
operator radi za objekte plus()
funkcijom preopterećenja .
Primjer: Preopterećenje + 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) ) )
Kada pokrenete program, izlaz će biti:
zbroj = (5, 1)
Ovdje je plus()
funkcija označena operator
ključnom riječi da bi kompajleru rekla da je +
operator preopterećen.
Izraz p1 + p2
se pretvara u p1.plus(p2)
ispod haube.
Primjer: - Preopterećenje operatera
U ovom ćete primjeru naučiti preopteretiti --
operatora. Izraz --a
se pretvara u a.dec()
ispod haube.
Funkcija dec()
member ne uzima nikakve argumente.
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) )
Kada pokrenete program, izlaz će biti:
točka = (2, -9)
Zapamti to,
zabava operatora dec () = Točka (- x, --y)
je ekvivalentan
zabava operatora dec (): Točka (povratna točka (- x, --y))
Nekoliko važnih bodova
1. Kada preopteretite operatera, pokušajte zadržati izvorni duh operatera. Na primjer,
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) )
Iako je gornji program tehnički ispravan, koristili smo +
operator za oduzimanje odgovarajućih svojstava dvaju objekata što je program učinilo zbunjujućim.
2. Za razliku od jezika poput Scale, samo se određeni skup operatora može preopteretiti u Kotlinu. Posjetite stranicu da biste saznali više o operatorima koji se mogu preopteretiti u Kotlinu i njihovim odgovarajućim funkcijama članova.