Dado que Kotlin proporciona tipos definidos por el usuario, también proporciona la funcionalidad adicional para sobrecargar los operadores estándar, de modo que trabajar con tipos definidos por el usuario sea más fácil. Todos los operadores unarios, binarios y relacionales se pueden sobrecargar. Los operadores están sobrecargados ya sea a través de las funciones miembro oa través de las funciones de extensión . Estas funciones están precedidas por el modificador de operador . Hay funciones estándar para cada tipo de operador que se pueden sobrecargar según el uso.
Operadores Unarios –
La siguiente tabla muestra las diversas funciones que se pueden definir para los operadores unarios. Estas funciones modifican la instancia de llamada.
Expresión del operador | función correspondiente |
---|---|
+x | x.unaryPlus() |
-X | x.unarioMenos() |
!X | x.no() |
Aquí, x corresponde al tipo para el que se define el operador. La funcionalidad sobrecargada se define dentro de las funciones respectivas.
Programa Kotlin para demostrar la sobrecarga del operador unario:
class UnaryOverload(var str:String) { // overloading the function operator fun unaryMinus() { str = str.reversed() } } // main function fun main(args : Array<String>) { val obj = UnaryOverload("HELLO") println("Initial string is ${obj.str}")y //calling the overloaded function unaryMinus() -obj println("String after applying unary operator ${obj.str}") }
Producción:
Initial string is HELLO String after applying unary operator OLLEH
Operadores de incremento y decremento –
El operador de incremento y decremento se puede definir para un tipo a través de las siguientes funciones. Esta función devuelve una nueva instancia con el resultado de la expresión.
Expresión del operador | función correspondiente |
---|---|
++ x | x.inc() |
– – X | x.dec() |
Ya sea que se usen en notación de postfijo o prefijo, estas funciones funcionan bien en ambos casos, con el mismo resultado esperado, como se esperaría al usar notaciones de prefijo o postfijo .
Programa Kotlin para demostrar la sobrecarga del operador:
class IncDecOverload(var str:String) { // overloading increment function operator fun inc(): IncDecOverload { val obj = IncDecOverload(this.str) obj.str = obj.str + 'a' return obj } // overloading decrement function operator fun dec(): IncDecOverload { val obj = IncDecOverload(this.str) obj.str = obj.str.substring(0,obj.str.length-1) return obj } override fun toString(): String { return str } } // main function fun main(args: Array<String>) { var obj = IncDecOverload("Hello") println(obj++) println(obj--) println(++obj) println(--obj) }
Producción:
Hello Helloa Helloa Hello
Operadores binarios –
La siguiente tabla muestra los operadores binarios y sus funciones equivalentes a definir. Todas estas funciones modifican la instancia de llamada.
Expresión del operador | función correspondiente |
---|---|
x1 + x2 | x1.más(x2) |
x1 – x2 | x1.menos(x2) |
x1 * x2 | x1.veces(x2) |
x1/x2 | x1.div(x2) |
x1 % x2 | x1.rem(x2) |
x1..x2 | x1.rango a(x2) |
Programa Kotlin para sobrecargar la función más –
class Object(var objName: String) { // Overloading the function operator fun plus(b: Int) { objName = "Name is $objName and data is $b" } override fun toString(): String { return objName } } // main function fun main() { val obj = Object("Chair") // Calling the overloaded function obj+9 println(obj) }
Producción:
Name is Chair and data is 9
Nota : los operadores relacionales no tienen funciones específicas para definir, para usar operadores relacionales en instancias de un tipo definido por el usuario, el tipo debe implementar la interfaz Comparable .
Otros operadores –
Kotlin admite una amplia gama de operadores, por lo que definir cada uno para un tipo no es una buena práctica de programación. La siguiente tabla muestra algunos de los otros operadores útiles que se pueden sobrecargar en Kotlin.
Expresión del operador | función correspondiente |
---|---|
x1 en x2 | x2.contiene(x1) |
x1 !en x2 | !x2.contiene(x1) |
x[yo] | x.obtener(i) |
x[yo, j] | x.get(i, j) |
x[i] = b | x.conjunto(i, b) |
x[i,j] = b | x.conjunto(i, j, b) |
X() | x.invocar() |
x(yo) | x.invocar(i) |
x(yo, j) | x. invocar (i, j) |
x1 += x2 | x1.plusAssign(x2) |
x1 -= x2 | x1.menosAsignar(x2) |
x1 *= x2 | x1.vecesAsignar(x2) |
x1 /= x2 | x1.divAssign(x2) |
x1 %= x2 | x1.remAsignar(x2) |
¿Escribir código en un comentario? Utilice ide.geeksforgeeks.org , genere un enlace y compártalo aquí.
Publicación traducida automáticamente
Artículo escrito por CharchitKapoor y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA