Preopterećenje operatera Kotlin (s primjerima)

Sadržaj

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+bpretvara 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 operatorključnom riječi da bi kompajleru rekla da je +operator preopterećen.

Izraz p1 + p2se pretvara u p1.plus(p2)ispod haube.

Primjer: - Preopterećenje operatera

U ovom ćete primjeru naučiti preopteretiti --operatora. Izraz --ase 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.

Zanimljivi članci...