Skip to content

Commit 7b755ce

Browse files
Refresh case-classes.md and nested-functions.md in russian (scala#2835)
1 parent 7e5b463 commit 7b755ce

File tree

3 files changed

+98
-15
lines changed

3 files changed

+98
-15
lines changed

_ru/tour/case-classes.md

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,82 @@ previous-page: multiple-parameter-lists
99
prerequisite-knowledge: classes, basics, mutability
1010
---
1111

12-
Классы образцы (Case classes) похожи на обычные классы с несколькими ключевыми отличиями, о которых мы поговорим ниже. Классы образцы хороши для моделирования неизменяемых данных. На следующей странице обзора вы увидите, насколько они полезны для участия в [сопоставлении с примером](pattern-matching.html).
12+
Классы образцы (Case classes) похожи на обычные классы с несколькими ключевыми отличиями, о которых мы поговорим ниже.
13+
Классы образцы хороши для моделирования неизменяемых данных.
14+
На следующей странице обзора вы увидите, насколько они полезны для участия в [сопоставлении с примером](pattern-matching.html).
1315

1416
## Объявление класса образца
17+
1518
Минимальный вариант объявления класса образца: указание ключевого слова `case class`, название и список параметров (которые могут быть пустыми). Пример:
19+
20+
{% tabs case-classe_Book %}
21+
22+
{% tab 'Scala 2 и 3' for=case-classe_Book %}
23+
1624
```scala mdoc
1725
case class Book(isbn: String)
1826

1927
val frankenstein = Book("978-0486282114")
2028
```
21-
Обратите внимание, что ключевое слово `new` не было использовано для создания экземпляра класса `Book`. Это связано с тем, что классы образцы по умолчанию имеют объект компаньон с методом `apply`, который берет на себя заботу о создании экземпляра класса.
29+
30+
{% endtab %}
31+
32+
{% endtabs %}
33+
34+
Обратите внимание, что ключевое слово `new` не было использовано для создания экземпляра класса `Book`.
35+
Это связано с тем, что классы образцы по умолчанию имеют объект компаньон с методом `apply`,
36+
который берет на себя заботу о создании экземпляра класса.
2237

2338
При создании класса образца с параметрами, эти параметры являются публичными и неизменяемыми.
39+
40+
{% tabs case-classe_Message_define %}
41+
42+
{% tab 'Scala 2 и 3' for=case-classe_Message_define %}
43+
2444
```
2545
case class Message(sender: String, recipient: String, body: String)
2646
val message1 = Message("[email protected]", "[email protected]", "Ça va ?")
2747
28-
println(message1.sender) // prints [email protected]
48+
println(message1.sender) // печатает [email protected]
2949
message1.sender = "[email protected]" // эта строка не компилируется
3050
```
51+
52+
{% endtab %}
53+
54+
{% endtabs %}
55+
3156
Вы не можете переназначить `message1.sender`, потому что это `val` (т.е. константа). Возможно использовать `var` в классах образцах, но это не рекомендуется.
3257

3358
## Сравнение
59+
3460
Классы образцы сравниваются по структуре, а не по ссылкам:
35-
```
61+
62+
{% tabs case-classe_Message_compare %}
63+
64+
{% tab 'Scala 2 и 3' for=case-classe_Message_compare %}
65+
66+
```scala mdoc
3667
case class Message(sender: String, recipient: String, body: String)
3768

3869
val message2 = Message("[email protected]", "[email protected]", "Com va?")
3970
val message3 = Message("[email protected]", "[email protected]", "Com va?")
4071
val messagesAreTheSame = message2 == message3 // true
4172
```
73+
74+
{% endtab %}
75+
76+
{% endtabs %}
77+
4278
Даже если `message2` и `message3` ссылаются на разные объекты, значения каждого из них равны.
4379

4480
## Копирование
81+
4582
Вы можете создать копию экземпляра класса образца, просто воспользовавшись методом `copy`. При этом по желанию можно изменить аргументы конструктора.
83+
84+
{% tabs case-classe_Message_copy %}
85+
86+
{% tab 'Scala 2 и 3' for=case-classe_Message_copy %}
87+
4688
```
4789
case class Message(sender: String, recipient: String, body: String)
4890
val message4 = Message("[email protected]", "[email protected]", "Me zo o komz gant ma amezeg")
@@ -51,4 +93,13 @@ message5.sender // [email protected]
5193
message5.recipient // [email protected]
5294
message5.body // "Me zo o komz gant ma amezeg"
5395
```
96+
97+
{% endtab %}
98+
99+
{% endtabs %}
100+
54101
Получатель `message4` использует в качестве отправителя `message5`, кроме параметра `body` который был скопирован из `message4`.
102+
103+
## Дополнительные ресурсы
104+
105+
- Дополнительная информация о классах образцах доступна в [Scala Book](/ru/scala3/book/domain-modeling-tools.html#case-class-ы)

_ru/tour/nested-functions.md

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,54 @@ previous-page: higher-order-functions
1010

1111
В Scala возможно объявление метода вкладывать в тело другого метода. Это реализовано в следующем примере, в котором метод `factorial` используется для вычисления факториала заданного числа:
1212

13+
{% tabs Nested_functions_definition class=tabs-scala-version %}
14+
15+
{% tab 'Scala 2' for=Nested_functions_definition %}
16+
1317
```scala mdoc
14-
def factorial(x: Int): Int = {
15-
def fact(x: Int, accumulator: Int): Int = {
16-
if (x <= 1) accumulator
17-
else fact(x - 1, x * accumulator)
18-
}
19-
fact(x, 1)
20-
}
21-
22-
println("Factorial of 2: " + factorial(2))
23-
println("Factorial of 3: " + factorial(3))
18+
def factorial(x: Int): Int = {
19+
def fact(x: Int, accumulator: Int): Int = {
20+
if (x <= 1) accumulator
21+
else fact(x - 1, x * accumulator)
22+
}
23+
fact(x, 1)
24+
}
25+
26+
println("Factorial of 2: " + factorial(2))
27+
println("Factorial of 3: " + factorial(3))
2428
```
2529

30+
{% endtab %}
31+
32+
{% tab 'Scala 3' for=Nested_functions_definition %}
33+
34+
```scala
35+
def factorial(x: Int): Int =
36+
def fact(x: Int, accumulator: Int): Int =
37+
if x <= 1 then accumulator
38+
else fact(x - 1, x * accumulator)
39+
fact(x, 1)
40+
41+
println("Factorial of 2: " + factorial(2))
42+
println("Factorial of 3: " + factorial(3))
43+
44+
```
45+
46+
{% endtab %}
47+
48+
{% endtabs %}
49+
50+
{% tabs Nested_functions_result %}
51+
52+
{% tab 'Scala 2 и 3' for=Nested_functions_result %}
53+
2654
Результат выполнения программы:
2755

2856
```
2957
Factorial of 2: 2
3058
Factorial of 3: 6
3159
```
60+
61+
{% endtab %}
62+
63+
{% endtabs %}

_tour/case-classes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,4 @@ The recipient of `message4` is used as the sender of `message5` but the `body` o
8989

9090
## More resources
9191

92-
* Learn more about case classes in the [Scala Book](/overviews/scala-book/case-classes.html)
92+
* Learn more about case classes in the [Scala Book](/scala3/book/domain-modeling-tools.html#case-classes)

0 commit comments

Comments
 (0)