Может ли существовать конструкция val (fisrt, second) = pair, где pair — класс Pair

«Может ли существовать конструкция val (fisrt, second) = pair, где pair — класс Pair» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, такая конструкция называется деструктуризация (destructuring declaration). Kotlin позволяет разбивать объекты на отдельные переменные, если класс имеет соответствующие компонентные функции (component1(), component2() и т.д.).

Для Pair и других стандартных классов (например, Triple, Map.Entry) эти функции уже определены.

Пример:

val pair = Pair("Hello", "World")
val (first, second) = pair
println(first)  // Hello
println(second) // World

Под капотом это преобразуется в:

val first = pair.component1()
val second = pair.component2()

Ограничение: Количество переменных должно совпадать с количеством компонентных функций класса.