In questo articolo imparerai a conoscere il sovraccarico degli operatori (definisci come funziona l'operatore per i tipi definiti dall'utente come gli oggetti) con l'aiuto di esempi.
Quando usi l'operatore in Kotlin, viene chiamata la sua funzione membro corrispondente. Ad esempio, l'espressione si a+b
trasforma in a.plus(b)
sotto il cofano.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
Quando esegui il programma, l'output sarà:
15
In effetti, la plus()
funzione è sovraccarica per funzionare con vari tipi di base di Kotlin e String
.
// + operatore per i tipi base operator fun plus (other: Byte): Int operator fun plus (other: Short): Int operator fun plus (other: Int): Int operator fun plus (other: Long): Long operator fun plus (altro: Float): Float operator fun plus (other: Double): Double // for string concatenation operator fun String? .plus (other: Any?): String
È inoltre possibile definire il modo in cui l'operatore funziona per gli oggetti sovraccaricando la sua funzione corrispondente. Ad esempio, è necessario definire come +
opera l'operatore per gli oggetti sovraccaricando la plus()
funzione.
Esempio: sovraccarico + operatore
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) ) )
Quando esegui il programma, l'output sarà:
somma = (5, 1)
Qui, la plus()
funzione è contrassegnata con una operator
parola chiave per indicare al compilatore che l' +
operatore è in sovraccarico.
L'espressione p1 + p2
si trasforma in p1.plus(p2)
sotto il cofano.
Esempio: - Sovraccarico dell'operatore
In questo esempio imparerai a sovraccaricare l' --
operatore. L'espressione --a
si trasforma in a.dec()
sotto il cofano.
La dec()
funzione membro non accetta argomenti.
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) )
Quando esegui il programma, l'uscita sarà:
punto = (2, -9)
Ricordati che,
operatore fun dec () = Punto (- x, --y)
è equivalente a
operator fun dec (): Point (return Point (- x, --y))
Pochi punti importanti
1. Quando sovraccarichi gli operatori, dovresti cercare di mantenere lo spirito originale dell'operatore. Per esempio,
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) )
Sebbene il programma sopra sia tecnicamente corretto, abbiamo usato +
operator per sottrarre le proprietà corrispondenti di due oggetti che hanno reso il programma confuso.
2. A differenza di linguaggi come Scala, solo un insieme specifico di operatori può essere sovraccaricato in Kotlin. Visita la pagina per conoscere gli operatori che possono essere sovraccaricati in Kotlin e le loro funzioni membro corrispondenti.