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+btrasforma 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 operatorparola chiave per indicare al compilatore che l' +operatore è in sovraccarico.
L'espressione p1 + p2si trasforma in p1.plus(p2)sotto il cofano.
Esempio: - Sovraccarico dell'operatore
In questo esempio imparerai a sovraccaricare l' --operatore. L'espressione --asi 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.








