Этот вопрос проверяет знание перегрузки операторов в Kotlin и её использование для работы с пользовательскими типами.
Перегрузка операторов в Kotlin позволяет определять, как операторы (например, +, -, *) работают с пользовательскими классами. Для этого используется модификатор operator перед функцией, которая описывает поведение оператора. Это улучшает читаемость кода и делает пользовательские классы более интуитивными в использовании.
Перегрузка операторов позволяет разработчикам задавать специфическое поведение стандартных операторов для пользовательских типов.
Как работает оператор operator:
Для перегрузки оператора необходимо определить функцию с ключевым словом operator.
Имя функции должно соответствовать оператору. Например, для + используется функция plus.
Пример реализации:
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 v1 = Vector(1, 2)
val v2 = Vector(3, 4)
val sum = v1 + v2
println(sum) // Вывод: Vector(x=4, y=6)
}Здесь перегружается оператор + для сложения двух векторов.
Другие операторы:
Вы можете перегружать операторы сравнения (==, <, >), индексирования ([]), вызова функций (()) и т.д.
Пример перегрузки *:
operator fun times(scale: Int): Vector {
return Vector(x * scale, y * scale)
}Перегрузка операторов позволяет создавать более интуитивные API для пользовательских классов, делая их использование удобным и выразительным. Она особенно полезна для математических операций, работы с коллекциями и DSL.