Skip to content

Commit 3c120bd

Browse files
Add types-inferred.md and types-generics.md in russian (#2789)
1 parent 9492c50 commit 3c120bd

File tree

5 files changed

+172
-4
lines changed

5 files changed

+172
-4
lines changed

_overviews/scala3-book/types-generics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Generics
33
type: section
44
description: This section introduces and demonstrates generics in Scala 3.
5-
languages: [zh-cn]
5+
languages: [ru, zh-cn]
66
num: 49
77
previous-page: types-inferred
88
next-page: types-intersection

_overviews/scala3-book/types-inferred.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Inferred Types
33
type: section
44
description: This section introduces and demonstrates inferred types in Scala 3
5-
languages: [zh-cn]
5+
languages: [ru, zh-cn]
66
num: 48
77
previous-page: types-introduction
88
next-page: types-generics

_ru/scala3/book/types-generics.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
---
2+
layout: multipage-overview
3+
title: Параметризованные типы
4+
scala3: true
5+
partof: scala3-book
6+
overview-name: "Scala 3 — Book"
7+
type: section
8+
description: В этом разделе представлены параметризованные типы в Scala 3.
9+
language: ru
10+
num: 49
11+
previous-page: types-inferred
12+
next-page:
13+
---
14+
15+
Универсальные (_generic_) классы (или trait-ы) принимают тип в качестве _параметра_ в квадратных скобках `[...]`.
16+
Для обозначения параметров типа согласно конвенции Scala используется одна заглавная буква (например, `A`).
17+
Затем этот тип можно использовать внутри класса по мере необходимости
18+
для параметров экземпляра метода или для возвращаемых типов:
19+
20+
{% tabs stack class=tabs-scala-version %}
21+
22+
{% tab 'Scala 2' %}
23+
24+
```scala
25+
// здесь мы объявляем параметр типа A
26+
// v
27+
class Stack[A] {
28+
private var elements: List[A] = Nil
29+
// ^
30+
// здесь мы ссылаемся на этот тип
31+
// v
32+
def push(x: A): Unit =
33+
elements = elements.prepended(x)
34+
def peek: A = elements.head
35+
def pop(): A = {
36+
val currentTop = peek
37+
elements = elements.tail
38+
currentTop
39+
}
40+
}
41+
```
42+
43+
{% endtab %}
44+
45+
{% tab 'Scala 3' %}
46+
47+
```scala
48+
// здесь мы объявляем параметр типа A
49+
// v
50+
class Stack[A]:
51+
private var elements: List[A] = Nil
52+
// ^
53+
// здесь мы ссылаемся на этот тип
54+
// v
55+
def push(x: A): Unit =
56+
elements = elements.prepended(x)
57+
def peek: A = elements.head
58+
def pop(): A =
59+
val currentTop = peek
60+
elements = elements.tail
61+
currentTop
62+
```
63+
64+
{% endtab %}
65+
{% endtabs %}
66+
67+
Эта реализация класса `Stack` принимает любой тип в качестве параметра.
68+
Прелесть параметризованных типов состоит в том,
69+
что теперь можно создавать `Stack[Int]`, `Stack[String]` и т.д.,
70+
что позволяет повторно использовать реализацию `Stack` для произвольных типов элементов.
71+
72+
Пример создания и использования `Stack[Int]`:
73+
74+
{% tabs stack-usage class=tabs-scala-version %}
75+
{% tab 'Scala 2' %}
76+
77+
```scala
78+
val stack = new Stack[Int]
79+
stack.push(1)
80+
stack.push(2)
81+
println(stack.pop()) // выводит 2
82+
println(stack.pop()) // выводит 1
83+
```
84+
85+
{% endtab %}
86+
87+
{% tab 'Scala 3' %}
88+
89+
```scala
90+
val stack = Stack[Int]
91+
stack.push(1)
92+
stack.push(2)
93+
println(stack.pop()) // выводит 2
94+
println(stack.pop()) // выводит 1
95+
```
96+
97+
{% endtab %}
98+
{% endtabs %}
99+
100+
> Подробности о том, как выразить вариантность с помощью универсальных типов,
101+
> см. в разделе ["Вариантность"][variance].
102+
103+
[variance]: {% link _overviews/scala3-book/types-variance.md %}

_ru/scala3/book/types-inferred.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
layout: multipage-overview
3+
title: Определение типов
4+
scala3: true
5+
partof: scala3-book
6+
overview-name: "Scala 3 — Book"
7+
type: section
8+
description: В этом разделе представлены и демонстрируются выводимые типы в Scala 3.
9+
language: ru
10+
num: 48
11+
previous-page: types-introduction
12+
next-page: types-generics
13+
---
14+
15+
Как и в других статически типизированных языках программирования,
16+
в Scala тип можно _объявить_ при создании новой переменной:
17+
18+
{% tabs xy %}
19+
{% tab 'Scala 2 и 3' %}
20+
21+
```scala
22+
val x: Int = 1
23+
val y: Double = 1
24+
```
25+
26+
{% endtab %}
27+
{% endtabs %}
28+
29+
В этих примерах типы _явно_ объявлены как `Int` и `Double` соответственно.
30+
Однако в Scala обычно необязательно указывать тип при объявлении переменной:
31+
32+
{% tabs abm %}
33+
{% tab 'Scala 2 и 3' %}
34+
35+
```scala
36+
val a = 1
37+
val b = List(1, 2, 3)
38+
val m = Map(1 -> "one", 2 -> "two")
39+
```
40+
41+
{% endtab %}
42+
{% endtabs %}
43+
44+
Когда вы это сделаете, Scala сама _выведет_ типы, как показано в следующей сессии REPL:
45+
46+
{% tabs abm2 %}
47+
{% tab 'Scala 2 и 3' %}
48+
49+
```scala
50+
scala> val a = 1
51+
val a: Int = 1
52+
53+
scala> val b = List(1, 2, 3)
54+
val b: List[Int] = List(1, 2, 3)
55+
56+
scala> val m = Map(1 -> "one", 2 -> "two")
57+
val m: Map[Int, String] = Map(1 -> one, 2 -> two)
58+
```
59+
60+
{% endtab %}
61+
{% endtabs %}
62+
63+
Действительно, большинство переменных определяются без указания типа,
64+
и способность Scala автоматически определять его — это одна из особенностей,
65+
которая делает Scala _похожим_ на язык с динамической типизацией.

_ru/scala3/book/types-introduction.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ title: Типы и система типов
44
scala3: true
55
partof: scala3-book
66
overview-name: "Scala 3 — Book"
7-
type: section
7+
type: chapter
88
description: В этой главе представлено введение в типы и систему типов Scala 3.
99
language: ru
1010
num: 47
1111
previous-page: fp-summary
12-
next-page:
12+
next-page: types-inferred
1313
---
1414

1515
Scala — уникальный язык, поскольку он статически типизирован, но часто кажется гибким и динамичным.

0 commit comments

Comments
 (0)