Освой Kotlin играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Часто требуются пары значений, как "ключ-значение". Для таких случаев выделен отдельный класс Pair. Относится к группе data class, а значит имеет методы equals(), hashCode(), component1, toString() и т.д. Также может использоваться для хранения связанных данных, например, координаты (точки x и y) и другие похожие случаи. В других языках есть похожий тип Tuple.
Создать пару можно через ключевое слово to, а затем обращаться к элементам через first и second.
val currency = "USA" to "Dollar"
println(currency.first)
println(currency.second)
Можно создать одну переменную, затем к ней присоединить значение/вторую переменную.
val cat = "Барсик"
val pair = cat.to(7)
println("${pair.first}у ${pair.second} лет") // Барсику 7 лет
Можно создать пару новых переменных и присвоить им объект Pair, они автоматически заберут нужные значения из пары.
val currency = "USA" to "Dollar"
val(country, money) = currency
println(country)
println(money)
Способ объединения нескольких переменных в скобки применим и к другим классам.
Из пар можно создавать списки.
val cats = listOf("Васька" to "Москва", "Барсик" to "Мурманск")
Пара может быть из разных типов.
val pair = "Moscow" to 1247 // Pair<String, Int>
Пару можно создать явно, используя конструктор.
val pair = Pair("Moscow", 1247)
Если брать ситуацию с координатами, то код будет следующим (разные варианты).
val coordinates: Pair<Int, Int> = Pair(2, 3)
val coordinates = Pair(2, 3)
val coordinates = 2 to 3
Класс Triple похож на Pair, но использует уже три значения.
val coordinates3D = Triple(2, 3, 1)
//val (x3, y3, z3) = coordinates3D
// или
val x3 = coordinates3D.first
val y3 = coordinates3D.second
val z3 = coordinates3D.third
Если вы хотите проигнорировать одно из значений, то используйте символ подчёркивания.
val coordinates3D = Triple(2, 3, 4)
val (x, y, _) = coordinates3D
Удобно использовать для дат.
val birthday = Triple(27, 7, 1996)
println("День рождения: ${birthday.first}")
println("Месяц рождения: ${birthday.second}")
println("Год рождения: ${birthday.third}")