Иногда данные используются в группах. Примером может быть пара координат (х, у) на 2D сетке. Аналогично набор координат на 3D сетке состоит из значений x, y и z. В Kotlin для таких данных используются типы Pair
и Triple
.
Содержание статьи
В других языках похожую функцию выполняет тип кортежей.
Типы Pair и Triple в Kotlin
Pair
и Triple
являются типами, которые представляют данные, состоящие из трех или двух значений любого типа. Если вам нужно больше трех значений, требуется использовать data class, который мы рассмотрим в будущих статьях.
Рассмотрим тип Pair
. В качестве примера определим пару 2D координат, где значение каждой оси является целым числом типа Int
:
1 | val coordinates: Pair<Int, Int> = Pair(2, 3) |
Типом константы coordinates
является Pair<Int, Int>
. Тип значений внутри Pair
, в данном случае является Int
, разделяются запятыми и заключаются в <>
. Код для создания Pair
почти такой же, каждое значение разделено запятыми и заключено в круглые скобки.
Вывод типа также может автоматически понять, что это тип Pair
:
1 | val coordinatesInferred = Pair(2, 3) |
Запись можно сделать более краткой, используя оператор to
:
1 | val coordinatesWithTo = 2 to 3 |
Аналогичным образом в Pair
можно поместить значения типа Double
:
1 2 | val coordinatesDoubles = Pair(2.1, 3.5) // Вывод типа будет следующим: Pair<Double, Double> |
Получить доступ к данным внутри Pair
можно так:
1 2 | val x1 = coordinates.first val y1 = coordinates.second |
Можно ссылаться на каждый элемент в Pair
по его положению в паре, начиная с first
. В этом примере x1
будет равен 2
, а y1
будет равен 3
.
В предыдущем примере может не сразу очевидно, что первое значение — это координата x
, а второе значение — координата y
. Это еще один пример того, почему при объявлении переменной важно давать переменным понятные названия.
Kotlin позволяет использовать объявление деструктуризации для отдельных частей Pair
. Таким образом можно четко указать, что из себя представляет каждая часть. К примеру:
1 2 | val (x, y) = coordinates // x и y принадлежат типу Int |
Здесь значения извлекаются из coordinates
и присваиваются к х
и у
.
Triple
работает так же, как и Pair
, только вместо двух значений у нас теперь три.
Если вам нужно одновременно получить доступ к частям данных из Triple
, как в примере выше, можно использовать более простой синтаксис:
1 2 | val coordinates3D = Triple(2, 3, 1) val (x3, y3, z3) = coordinates3D |
Здесь объявляются три новые константы — x3
, y3
и z3
, им присваивается каждая часть из Triple
. Код является эквивалентом следующему:
1 2 3 4 | val coordinates3D = Triple(2, 3, 1) val x3 = coordinates3D.first val y3 = coordinates3D.second val z3 = coordinates3D.third |
Если вам нужно проигнорировать определенный элемент из Pair
или Triple
, можно заменить соответствующую часть объявления подчеркиванием. К примеру, при выполнении 2D вычислений необходимо проигнорировать координату z
из coordinates3D
. Это делается следующим образом:
1 | val (x4, y4, _) = coordinates3D |
Эта строка кода объявляет только х4
и у4
. С помощью специального символа _
игнорируется указанная часть.
Задания для проверки
- Объявите константу
Triple
, которая содержит три значенияInt
. Используйте ее для обозначения даты (месяц, день, год); - Извлеките значения из
Triple
в три константы с названиямиmonth
,day
иyear
; - Через одну строку выведите значения месяца и года в две константы. Вам нужно будет использовать подчеркивание
_
, чтобы проигнорировать день; - Так как значения внутри
Pairs
иTriple
нельзя изменить, нужно извлечь из них значения, внести изменения, а затем создать новуюPair
илиTriple
. Используя значения, извлеченные на третьем шаге, измените значение месяца и создайте новуюPair
, содержащую измененный месяц вместе с не измененным годом.
acheter kamagra livraison le lendemain nourrie ex
kamagra uk avez-vous besoin d’une ordonnance
enclomiphene order
ordering enclomiphene cheap united states
order androxal canada no prescription
cheapest buy androxal generic canada no prescription
buy cheap dutasteride buy safely online
cheapest buy dutasteride generic good
get flexeril cyclobenzaprine cost usa
buying flexeril cyclobenzaprine generic how effective
how to order gabapentin generic gabapentin
cheap gabapentin uk in store
get itraconazole uk in store
cheapest buy itraconazole generic uae
buying fildena purchase online safely
get fildena generic usa
get staxyn buy online usa
buy staxyn without prescription pay cod
get avodart lowest price
ordering avodart generic from india
order rifaximin generic version
ordering rifaximin cost of tablet
buy xifaxan usa online pharmacy
cheap xifaxan generic overnight shipping
koupit kamagra přes noc dodání
ne obecný kamagra bez lékařského předpisu