Sovraccarico dell'operatore di Kotlin (con esempi)

Sommario

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.

Articoli interessanti...