English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo, imparerai riguardo al sovraccarico degli operatori tramite esempi (come gli operatori funzionano per tipi definiti dall'utente come oggetti).
Quando si utilizza operator in Kotlin, viene chiamata la sua funzione membro corrispondente. Ad esempio, l'espressione a + b viene convertita in background in a.plus(b).
fun main(args: Array<String>) { val a = 5 val b = 10 print(a.plus(b)) // print(a+b) {}
Quando esegui il programma, l'output sarà:
15
In realtà, la funzione plus() è sovraccaricata per gestire vari tipi di base di Kotlin e Stringhe (stringhe).
// + operatore di calcolo per tipi di base operatore fun plus(other: Byte): Int operatore fun plus(other: Short): Int operator fun plus(other: Int): Int operator fun plus(other: Long): Long operator fun plus(other: Float): Float operator fun plus(other: Double): Double //Usato per la connessione di stringhe operator fun String?.plus(other: Any?): String
Puoi anche definire come gli operatori lavorano con gli oggetti sovraccaricando le funzioni corrispondenti. Ad esempio, devi sovraccaricare la funzione plus() per definire come l'operatore + lavora con gli oggetti.
fun main(args: Array<String>) { val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("somma = (${sum.x}, ${sum.y})") {} class Point(val x: Int = 0, val y: Int = 10) { //Sovraccarico della funzione plus operator fun plus(p: Point): Point { return Point(x + p.x, y + p.y) {} {}
Quando esegui il programma, l'output sarà:
sum = (5, 1)
In questo caso, la funzione plus() è marcata con la parola chiave operator per informare il compilatore che l'operatore + viene sovraccaricato.
L'espressione p1 + p2 viene convertita in background in p1.plus(p2).
In questo esempio, imparerai a sovraccaricare l'operatore -.
La funzione membro dec() non accetta alcun parametro.
fun main(args: Array<String>) { 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'output sarà:
point = (2, -9)
Ricorda,
operator fun dec() = Point(--x, --y)
è equivalente a
operator fun dec(): Point { return Point(--x, --y) {}
1、Sul caricamento degli operatori, è consigliabile mantenere l'effetto originale dell'operatore. Ad esempio,
fun main(args: Array<String>) { val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("somma = (${sum.x}, ${sum.y})") {} class Point(val x: Int = 0, val y: Int = 10) { //Sovraccarica la funzione plus operator fun plus(p: Point) = Point(x - p.x, y - p.y) {}
Nonostante il programma sopra sia tecnicamente corretto, abbiamo utilizzato l'operatore + per sottrarre le proprietà corrispondenti di due oggetti, il che rende il programma confuso.
A differenza di linguaggi come Scala, in Kotlin è possibile sovraccaricare solo un insieme specifico di operatori.