Kotlin-operaattorin ylikuormitus (esimerkkejä)

Sisällysluettelo

Tässä artikkelissa opit operaattoreiden ylikuormituksesta (määritä kuinka operaattori toimii käyttäjän määrittelemien tyyppien, kuten objektien kohdalla) esimerkkien avulla.

Kun käytät operaattoria Kotlinissa, sitä vastaava jäsenfunktio kutsutaan. Esimerkiksi ilme a+bmuuttuu a.plus(b)hupun alle.

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

Kun suoritat ohjelmaa, tulos on:

 15

Itse asiassa plus()toiminto on ylikuormitettu toimimaan eri Kotlin-perustyyppien kanssa String.

 // + operaattori perustyypeille operaattori fun plus (muut: tavu): Int operator fun plus (muut: Short): Int operator fun plus (muut: Int): Int operator fun plus (muut: Long): pitkä operator fun plus (muut: Float): Float operator fun plus (muut: Double): Double // merkkijonon ketjutusoperaattoreille fun String? .plus (other: Any?): String 

Voit myös määritellä kuinka operaattori toimii objektien kanssa ylikuormittamalla vastaavaa toimintoa. Esimerkiksi sinun on määritettävä, kuinka +operaattori toimii objektien kanssa ylikuormitustoiminnolla plus().

Esimerkki: Ylikuormitus + operaattori

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

Kun suoritat ohjelmaa, tulos on:

 summa = (5, 1)

Tässä plus()funktio on merkitty operatoravainsanalla kertomaan kääntäjälle, että +operaattori on ylikuormitettu.

Lauseke p1 + p2muuttuu p1.plus(p2)konepellin alle.

Esimerkki: - Käyttäjän ylikuormitus

Tässä esimerkissä opit ylikuormittamaan --operaattoria. Lauseke --amuuttuu a.dec()konepellin alle.

dec()Jäsenfunktiogeneraattori ei ota mitään perusteluja.

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

Kun suoritat ohjelmaa, ouput on:

 piste = (2, -9) 

Muista se,

 operaattorin hauska dec () = piste (- x, --y)

vastaa

 operaattorin hauska dec (): piste (paluupiste (- x, --y))

Muutama tärkeä kohta

1. Kun ylikuormitat operaattoreita, sinun on yritettävä säilyttää käyttäjän alkuperäinen henki. Esimerkiksi,

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

Vaikka yllä oleva ohjelma on teknisesti oikea, olemme käyttäneet +operaattoria vähentämään kahden objektin vastaavat ominaisuudet, mikä teki ohjelmasta hämmentävän.

2. Toisin kuin Scalan kaltaiset kielet, vain tiettyjä operaattoreita voidaan ylikuormittaa Kotlinissa. Vierailemalla sivulla opit operaattoreita, jotka voivat olla ylikuormitettuja Kotlinissa, ja heidän vastaavia jäsentoimintojaan.

Mielenkiintoisia artikkeleita...