- Перегрузка оператора плюс (+):
Оператор плюс можно перегрузить для выполнения пользовательских операций сложения между объектами ваших классов. Например, предположим, что у нас есть классVector
, который представляет математический вектор. Перегрузив оператор плюс, вы можете сложить два вектора вместе, используя синтаксис типаvector1 + vector2
. Вот пример того, как можно реализовать оператор плюс для классаVector
:
data class Vector(val x: Int, val y: Int) {
operator fun plus(other: Vector): Vector {
return Vector(x + other.x, y + other.y)
}
}
fun main() {
val vector1 = Vector(1, 2)
val vector2 = Vector(3, 4)
val result = vector1 + vector2
println(result) // Output: Vector(x=4, y=6)
}
- Перегрузка оператора «минус» (-):
Подобно оператору «плюс», оператор «минус» можно перегрузить для выполнения пользовательских операций вычитания между объектами ваших классов. Давайте продолжим работу с примером классаVector
и перегрузим оператор минус, чтобы вычитать один вектор из другого:
data class Vector(val x: Int, val y: Int) {
operator fun minus(other: Vector): Vector {
return Vector(x - other.x, y - other.y)
}
}
fun main() {
val vector1 = Vector(4, 6)
val vector2 = Vector(2, 3)
val result = vector1 - vector2
println(result) // Output: Vector(x=2, y=3)
}
- Перегрузка оператора Times (*):
Оператор Times можно перегрузить для выполнения пользовательских операций умножения между объектами ваших классов. Давайте рассмотрим классRectangle
и перегрузим оператор времени для масштабирования размеров прямоугольника:
data class Rectangle(val width: Int, val height: Int) {
operator fun times(scale: Int): Rectangle {
return Rectangle(width * scale, height * scale)
}
}
fun main() {
val rectangle = Rectangle(3, 4)
val scaledRectangle = rectangle * 2
println(scaledRectangle) // Output: Rectangle(width=6, height=8)
}
- Перегрузка оператора Div (/):
Оператор div можно перегрузить для выполнения пользовательских операций разделения между объектами ваших классов. Давайте рассмотрим классFraction
, который представляет математическую дробь, и перегрузим оператор div для деления одной дроби на другую:
data class Fraction(val numerator: Int, val denominator: Int) {
operator fun div(other: Fraction): Fraction {
return Fraction(numerator * other.denominator, denominator * other.numerator)
}
}
fun main() {
val fraction1 = Fraction(1, 2)
val fraction2 = Fraction(3, 4)
val result = fraction1 / fraction2
println(result) // Output: Fraction(numerator=4, denominator=6)
}
Перегрузка операторов в Kotlin — это мощная функция, позволяющая переопределить поведение операторов для ваших пользовательских классов. Используя перегрузку операторов, вы можете писать выразительный код, очень похожий на естественный язык, делая ваш код более читабельным и удобным в сопровождении. Мы рассмотрели примеры перегрузки операторов «плюс», «минус», «время» и «div», но Kotlin также обеспечивает поддержку перегрузки других операторов. Так что вперед, раскройте возможности перегрузки операторов в Kotlin и поднимите свой код на новый уровень!