Skip to content

Commit 05aaccb

Browse files
committed
Add taste-collections.md in russian
1 parent de2a482 commit 05aaccb

File tree

2 files changed

+162
-1
lines changed

2 files changed

+162
-1
lines changed

_overviews/scala3-book/taste-collections.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Collections
33
type: section
44
description: This page provides a high-level overview of the main features of the Scala 3 programming language.
5-
languages: [zh-cn]
5+
languages: [ru, zh-cn]
66
num: 13
77
previous-page: taste-objects
88
next-page: taste-contextual-abstractions

_ru/scala3/book/taste-collections.md

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
---
2+
layout: multipage-overview
3+
title: Коллекции
4+
scala3: true
5+
partof: scala3-book
6+
overview-name: "Scala 3 — Book"
7+
type: chapter
8+
description: На этой странице представлен обзор основных коллекций в Scala 3.
9+
language: ru
10+
num: 13
11+
previous-page: taste-objects
12+
next-page: taste-contextual-abstractions
13+
---
14+
15+
16+
Библиотека Scala поставляется с богатым набором классов коллекций, и эти классы содержат множество методов.
17+
Классы коллекций доступны как в неизменяемой, так и в изменяемой форме.
18+
19+
## Создание списков
20+
21+
Чтобы дать вам представление о том, как они работают, вот несколько примеров, в которых используется класс `List`,
22+
являющийся неизменяемым классом связанного списка.
23+
В этих примерах показаны различные способы создания заполненного `List`:
24+
25+
{% tabs collection_1 %}
26+
{% tab 'Scala 2 and 3' for=collection_1 %}
27+
28+
```scala
29+
val a = List(1, 2, 3) // a: List[Int] = List(1, 2, 3)
30+
31+
// методы Range
32+
val b = (1 to 5).toList // b: List[Int] = List(1, 2, 3, 4, 5)
33+
val c = (1 to 10 by 2).toList // c: List[Int] = List(1, 3, 5, 7, 9)
34+
val e = (1 until 5).toList // e: List[Int] = List(1, 2, 3, 4)
35+
val f = List.range(1, 5) // f: List[Int] = List(1, 2, 3, 4)
36+
val g = List.range(1, 10, 3) // g: List[Int] = List(1, 4, 7)
37+
```
38+
39+
{% endtab %}
40+
{% endtabs %}
41+
42+
## Методы `List`
43+
44+
В следующих примерах показаны некоторые методы, которые можно вызывать для заполненного списка.
45+
Обратите внимание, что все эти методы являются функциональными,
46+
а это означает, что они не изменяют коллекцию, на которой вызываются,
47+
а вместо этого возвращают новую коллекцию с обновленными элементами.
48+
Результат, возвращаемый каждым выражением, отображается в комментарии к каждой строке:
49+
50+
{% tabs collection_2 %}
51+
{% tab 'Scala 2 and 3' for=collection_2 %}
52+
53+
```scala
54+
// a sample list
55+
val a = List(10, 20, 30, 40, 10) // List(10, 20, 30, 40, 10)
56+
57+
a.drop(2) // List(30, 40, 10)
58+
a.dropWhile(_ < 25) // List(30, 40, 10)
59+
a.filter(_ < 25) // List(10, 20, 10)
60+
a.slice(2,4) // List(30, 40)
61+
a.tail // List(20, 30, 40, 10)
62+
a.take(3) // List(10, 20, 30)
63+
a.takeWhile(_ < 30) // List(10, 20)
64+
65+
// flatten
66+
val a = List(List(1,2), List(3,4))
67+
a.flatten // List(1, 2, 3, 4)
68+
69+
// map, flatMap
70+
val nums = List("one", "two")
71+
nums.map(_.toUpperCase) // List("ONE", "TWO")
72+
nums.flatMap(_.toUpperCase) // List('O', 'N', 'E', 'T', 'W', 'O')
73+
```
74+
75+
{% endtab %}
76+
{% endtabs %}
77+
78+
Эти примеры показывают, как методы “foldLeft” и “reduceLeft” используются
79+
для суммирования значений в последовательности целых чисел:
80+
81+
{% tabs collection_3 %}
82+
{% tab 'Scala 2 and 3' for=collection_3 %}
83+
84+
```scala
85+
val firstTen = (1 to 10).toList // List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
86+
87+
firstTen.reduceLeft(_ + _) // 55
88+
firstTen.foldLeft(100)(_ + _) // 155 (100 является “начальным” значением)
89+
```
90+
91+
{% endtab %}
92+
{% endtabs %}
93+
94+
Для классов коллекций Scala доступно гораздо больше методов,
95+
и они продемонстрированы в главе ["Коллекции"][collections] и в [API документации][api].
96+
97+
## Кортежи
98+
99+
В Scala _кортеж_ (_tuple_) — это тип, позволяющий легко поместить набор различных типов в один и тот же контейнер.
100+
Например, используя данный case класс `Person`:
101+
102+
{% tabs collection_4 %}
103+
{% tab 'Scala 2 and 3' for=collection_4 %}
104+
105+
```scala
106+
case class Person(name: String)
107+
```
108+
109+
{% endtab %}
110+
{% endtabs %}
111+
112+
Вот как вы создаете кортеж, который содержит `Int`, `String` и пользовательское значение `Person`:
113+
114+
{% tabs collection_5 %}
115+
{% tab 'Scala 2 and 3' for=collection_5 %}
116+
117+
```scala
118+
val t = (11, "eleven", Person("Eleven"))
119+
```
120+
121+
{% endtab %}
122+
{% endtabs %}
123+
124+
Когда у вас есть кортеж, вы можете получить доступ к его значениям, привязав их к переменным,
125+
или получить к ним доступ по номеру:
126+
127+
{% tabs collection_6 %}
128+
{% tab 'Scala 2 and 3' for=collection_6 %}
129+
130+
```scala
131+
t(0) // 11
132+
t(1) // "eleven"
133+
t(2) // Person("Eleven")
134+
```
135+
136+
{% endtab %}
137+
{% endtabs %}
138+
139+
Вы также можете использовать этот метод _извлечения_, чтобы присвоить поля кортежа именам переменных:
140+
141+
{% tabs collection_7 %}
142+
{% tab 'Scala 2 and 3' for=collection_7 %}
143+
144+
```scala
145+
val (num, str, person) = t
146+
147+
// в результате:
148+
// val num: Int = 11
149+
// val str: String = eleven
150+
// val person: Person = Person(Eleven)
151+
```
152+
153+
{% endtab %}
154+
{% endtabs %}
155+
156+
Кортежи хороши в тех случаях, когда вы хотите поместить коллекцию разнородных типов в небольшую структуру, похожую на коллекцию.
157+
Дополнительные сведения о кортежах см. ["в справочной документации"][reference].
158+
159+
[collections]: {% link _overviews/scala3-book/collections-intro.md %}
160+
[api]: https://scala-lang.org/api/3.x/
161+
[reference]: {{ site.scala3ref }}/overview.html

0 commit comments

Comments
 (0)