Skip to content

Commit 2cfc4b0

Browse files
Refresh _ru/tour/tuples.md (#2791)
1 parent 5f67b8d commit 2cfc4b0

File tree

2 files changed

+93
-41
lines changed

2 files changed

+93
-41
lines changed

_ru/tour/tuples.md

Lines changed: 92 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,82 +9,134 @@ previous-page: traits
99
topics: tuples
1010
---
1111

12-
В Scala, кортеж (Тuple) это класс контейнер содержащий упорядоченный набор элементов различного типа.
13-
Кортежи неизменяемы.
12+
В Scala, кортеж (Тuple) - это контейнер содержащий упорядоченный набор элементов различного типа.
13+
Кортежи неизменяемы.
1414

1515
Кортежи могут пригодиться, когда нам нужно вернуть сразу несколько значений из функции.
1616

1717
Кортеж может быть создан как:
1818

19+
{% tabs tuple-construction %}
20+
21+
{% tab 'Scala 2 и 3' for=tuple-construction %}
22+
1923
```scala mdoc
20-
val ingredient = ("Sugar" , 25):Tuple2[String, Int]
24+
val ingredient = ("Sugar", 25)
2125
```
22-
Такая запись создает кортеж размерности 2, содержащий пару элементов String и Int.
2326

24-
Кортежи в Скале - представлены серией классов: Tuple2, Tuple3 и т.д., до Tuple22.
25-
Таким образом, создавая кортеж с n элементами (n лежащими между 2 и 22), Скала просто создает один из соответствующих классов, который параметризован типом входящих в состав элементов.
27+
{% endtab %}
28+
29+
{% endtabs %}
2630

27-
В нашем примере, составляющие тип Tuple2[String, Int].
31+
Такая запись создает кортеж, содержащий пару элементов `String` и `Int`.
32+
33+
Выводимый тип `ingredient` - это `(String, Int)`.
2834

2935
## Доступ к элементам
3036

31-
Доступ к элементам кортежа осуществляется при помощи синтаксиса подчеркивания.
32-
'tuple._n' дает n-ый элемент (столько, сколько существует элементов).
37+
{% tabs tuple-indexed-access class=tabs-scala-version %}
38+
39+
{% tab 'Scala 2' for=tuple-indexed-access %}
40+
41+
Один из способов доступа к элементам кортежа — по их позиции.
42+
`tuple._n` дает n-ый элемент (столько, сколько существует элементов).
3343

3444
```scala mdoc
3545
println(ingredient._1) // Sugar
36-
3746
println(ingredient._2) // 25
3847
```
3948

40-
## Распаковка данных кортежа
49+
{% endtab %}
4150

42-
Scala кортежи также поддерживают [распаковку](extractor-objects.html).
51+
{% tab 'Scala 3' for=tuple-indexed-access %}
4352

44-
```scala mdoc
45-
val (name, quantity) = ingredient
53+
Один из способов доступа к элементам кортежа — по их позиции.
54+
Доступ к отдельным элементам осуществляется с помощью `tuple(0)`, `tuple(1)` и так далее.
55+
56+
```scala
57+
println(ingredient(0)) // Sugar
58+
println(ingredient(1)) // 25
59+
```
60+
61+
{% endtab %}
62+
63+
{% endtabs %}
64+
65+
## Сопоставление с образцом для кортежей
66+
67+
Кортеж также можно распаковать с помощью сопоставления с образцом:
4668

47-
println(name) // Sugar
69+
{% tabs tuple-extraction %}
4870

71+
{% tab 'Scala 2 и 3' for=tuple-extraction %}
72+
73+
```scala mdoc
74+
val (name, quantity) = ingredient
75+
println(name) // Sugar
4976
println(quantity) // 25
5077
```
5178

52-
Распаковка данных кортежа может быть использована в [сопоставлении с примером](pattern-matching.html)
79+
{% endtab %}
80+
81+
{% endtabs %}
82+
83+
Здесь выводимый тип `name` - `String` и выводимый тип `quantity` - `Int`.
84+
85+
Вот еще один пример сопоставления с образцом кортежа:
86+
87+
{% tabs tuple-foreach-patmat %}
88+
89+
{% tab 'Scala 2 и 3' for=tuple-foreach-patmat %}
5390

5491
```scala mdoc
55-
val planetDistanceFromSun = List(("Mercury", 57.9), ("Venus", 108.2), ("Earth", 149.6 ), ("Mars", 227.9), ("Jupiter", 778.3))
56-
57-
planetDistanceFromSun.foreach{ tuple => {
58-
59-
tuple match {
60-
61-
case ("Mercury", distance) => println(s"Mercury is $distance millions km far from Sun")
62-
63-
case p if(p._1 == "Venus") => println(s"Venus is ${p._2} millions km far from Sun")
64-
65-
case p if(p._1 == "Earth") => println(s"Blue planet is ${p._2} millions km far from Sun")
66-
67-
case _ => println("Too far....")
68-
69-
}
70-
71-
}
72-
92+
val planets =
93+
List(("Mercury", 57.9), ("Venus", 108.2), ("Earth", 149.6),
94+
("Mars", 227.9), ("Jupiter", 778.3))
95+
planets.foreach {
96+
case ("Earth", distance) =>
97+
println(s"Our planet is $distance million kilometers from the sun")
98+
case _ =>
7399
}
74100
```
75101

76-
Или в ['for' выражении](for-comprehensions.html).
102+
{% endtab %}
103+
104+
{% endtabs %}
105+
106+
Или, в _for-comprehension_:
107+
108+
{% tabs tuple-for-extraction class=tabs-scala-version %}
109+
110+
{% tab 'Scala 2' for=tuple-for-extraction %}
77111

78112
```scala mdoc
79113
val numPairs = List((2, 5), (3, -7), (20, 56))
80-
81114
for ((a, b) <- numPairs) {
82-
83115
println(a * b)
84-
85116
}
86117
```
87118

88-
Значение () типа Unit по свой сути совпадает со значением () типа Tuple0. Может быть только одно значение такого типа, так как в нём нет элементов.
119+
{% endtab %}
120+
121+
{% tab 'Scala 3' for=tuple-for-extraction %}
122+
123+
```scala
124+
val numPairs = 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+
## Дополнительные ресурсы
89141

90-
Иногда бывает трудно выбирать между кортежами и классами образцами. Как правило, классы образцы являются предпочтительным выбором, если класс-контейнер содержащий элементы сам по себе имеет значимый смысл.
142+
- Дополнительная информация о кортежах - в книге [Scala Book](/ru/scala3/book/taste-collections.html#кортежи)

_tour/tuples.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,4 @@ Users may sometimes find it hard to choose between tuples and case classes. Case
126126

127127
## More resources
128128

129-
* Learn more about tuples in the [Scala Book](/overviews/scala-book/tuples.html)
129+
* Learn more about tuples in the [Scala Book](/scala3/book/taste-collections.html#tuples)

0 commit comments

Comments
 (0)