3 - Operator Overloading
3 - Operator Overloading
Since Kotlin provides user-defined types, it also provides the additional functionality to overload the standard
operators, so that working with user-defined types is easier. All of the unary, binary, relational operators can be
overloaded. The operators are overloaded either through the member functions or through extension functions.
These functions are preceded by the operator modifier. There are standard functions for every type of operator that
can be overloaded according to the usage.
Unary Operators –
The following table shows the various functions that can be defined for unary operators. These functions modify the
calling instance.
+x x.unaryPlus()
-x x.unaryMinus()
!x x.not()
Here, x corresponds to the type for which the operator is defined. The overloaded functionality is defined within the
respective functions.
Output:
The increment and decrement operator can be defined for a type through the following functions. These function
returns a new instance with the outcome of the expression.
++x x.inc()
––x x.dec()
Either used in postfix or prefix notation these functions work well in both the cases, with the same expected output,
as one would expect when using prefix or postfix notations.
Output:
Hello
Helloa
Helloa
Hello
Binary Operators –
The following table shows the binary operators and their equivalent functions to be defined. All these functions
modify the calling instance.
x1 + x2 x1.plus(x2)
x1 – x2 x1.minus(x2)
x1 * x2 x1.times(x2)
x1/ x2 x1.div(x2)
x1 % x2 x1.rem(x2)
x1..x2 x1.rangeTo(x2)
Output:
Note- The relational operators do not have any specific functions to be defined, to use relational operators on
instances of a user-defined type, the type must implement the Comparable interface.
Other operators –
Kotlin supports a wide range of operators, hence defining each for a type is not a good programming practice. The
following table shows some of the other useful operators that can be overloaded is Kotlin.
Operator expression Corresponding
function
x1 in x2 x2.contains(x1)
x1 !in x2 !x2.contains(x1)
x[i] x.get(i)
x[i, j] x.get(i, j)
x[i] = b x.set(i, b)
x[i, j] = b x.set(i, j, b)
x() x.invoke()
x(i) x.invoke(i)
x(i, j) x.invoke(i, j)
x1 += x2 x1.plusAssign(x2)
x1 -= x2 x1.minusAssign(x2)
x1 *= x2 x1.timesAssign(x2)
x1 /= x2 x1.divAssign(x2)
x1 %= x2 x1.remAssign(x2)
Similar Reads
Kotlin Elvis Operator(?:) Kotlin Flow Zip Operator For Multiple Parallel
Network Calls
Android - Create Group BarChart with Kotlin Kotlin | Language for Android, now Official by
Google
Android Shared Element Transition with Kotlin Kotlin | Retrieve Collection Parts