You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _ru/tour/tuples.md
+92-40Lines changed: 92 additions & 40 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,82 +9,134 @@ previous-page: traits
9
9
topics: tuples
10
10
---
11
11
12
-
В Scala, кортеж (Тuple) это класс контейнер содержащий упорядоченный набор элементов различного типа.
13
-
Кортежи неизменяемы.
12
+
В Scala, кортеж (Тuple) - это контейнер содержащий упорядоченный набор элементов различного типа.
13
+
Кортежи неизменяемы.
14
14
15
15
Кортежи могут пригодиться, когда нам нужно вернуть сразу несколько значений из функции.
16
16
17
17
Кортеж может быть создан как:
18
18
19
+
{% tabs tuple-construction %}
20
+
21
+
{% tab 'Scala 2 и 3' for=tuple-construction %}
22
+
19
23
```scala mdoc
20
-
valingredient= ("Sugar", 25):Tuple2[String, Int]
24
+
valingredient= ("Sugar", 25)
21
25
```
22
-
Такая запись создает кортеж размерности 2, содержащий пару элементов String и Int.
23
26
24
-
Кортежи в Скале - представлены серией классов: Tuple2, Tuple3 и т.д., до Tuple22.
25
-
Таким образом, создавая кортеж с n элементами (n лежащими между 2 и 22), Скала просто создает один из соответствующих классов, который параметризован типом входящих в состав элементов.
27
+
{% endtab %}
28
+
29
+
{% endtabs %}
26
30
27
-
В нашем примере, составляющие тип Tuple2[String, Int].
31
+
Такая запись создает кортеж, содержащий пару элементов `String` и `Int`.
32
+
33
+
Выводимый тип `ingredient` - это `(String, Int)`.
28
34
29
35
## Доступ к элементам
30
36
31
-
Доступ к элементам кортежа осуществляется при помощи синтаксиса подчеркивания.
32
-
'tuple._n' дает n-ый элемент (столько, сколько существует элементов).
Значение () типа Unit по свой сути совпадает со значением () типа Tuple0. Может быть только одно значение такого типа, так как в нём нет элементов.
119
+
{% endtab %}
120
+
121
+
{% tab 'Scala 3' for=tuple-for-extraction %}
122
+
123
+
```scala
124
+
valnumPairs=List((2, 5), (3, -7), (20, 56))
125
+
for (a, b) <- numPairs do
126
+
println(a * b)
127
+
```
128
+
129
+
{% endtab %}
130
+
131
+
{% endtabs %}
132
+
133
+
## Кортежи и кейс-классы
134
+
135
+
Иногда бывает трудно выбирать между кортежами и кейс-классами.
136
+
Кейс-классы содержат именованные элементы. Имена могут улучшить читаемость некоторых типов кода.
137
+
В приведенном выше примере мы могли бы определить планеты, как `case class Planet(name: String, distance: Double)`,
138
+
а не использовать кортежи.
139
+
140
+
## Дополнительные ресурсы
89
141
90
-
Иногда бывает трудно выбирать между кортежами и классами образцами. Как правило, классы образцы являются предпочтительным выбором, если класс-контейнер содержащий элементы сам по себе имеет значимый смысл.
142
+
- Дополнительная информация о кортежах - в книге [Scala Book](/ru/scala3/book/taste-collections.html#кортежи)
0 commit comments