Skip to content

Commit 6ffa19d

Browse files
committed
Add taste-vars-data-types.md in russian
1 parent 10777d0 commit 6ffa19d

File tree

2 files changed

+277
-1
lines changed

2 files changed

+277
-1
lines changed

_overviews/scala3-book/taste-vars-data-types.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Variables and Data Types
33
type: section
44
description: This section demonstrates val and var variables, and some common Scala data types.
5-
languages: [zh-cn]
5+
languages: [ru, zh-cn]
66
num: 7
77
previous-page: taste-repl
88
next-page: taste-control-structures
Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
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: В этом разделе демонстрируются переменные val и var, а также некоторые распространенные типы данных Scala.
9+
language: ru
10+
num: 7
11+
previous-page: taste-repl
12+
next-page: taste-control-structures
13+
---
14+
15+
16+
В этом разделе представлен обзор переменных и типов данных Scala.
17+
18+
## Два вида переменных
19+
20+
Когда вы создаете новую переменную в Scala, то объявляете, является ли переменная неизменяемой или изменяемой:
21+
22+
<table>
23+
<thead>
24+
<tr>
25+
<th>Тип переменной</th>
26+
<th>Описание</th>
27+
</tr>
28+
</thead>
29+
<tbody>
30+
<tr>
31+
<td valign="top"><code>val</code></td>
32+
<td valign="top">Создает <em>неизменяемую</em> переменную &mdash; как <code>final</code> в Java. Вы всегда должны создавать переменную с <code>val</code>, если нет причины, по которой вам нужна изменяемая переменная.</td>
33+
</tr>
34+
<tr>
35+
<td><code>var</code></td>
36+
<td>Создает <em>изменяемую</em> переменную и должна использоваться только в том случае, если содержимое переменной будет меняться с течением времени.</td>
37+
</tr>
38+
</tbody>
39+
</table>
40+
41+
Эти примеры показывают, как создавать `val` и `var` переменные:
42+
43+
{% tabs var-express-1 %}
44+
{% tab 'Scala 2 and 3' %}
45+
46+
```scala
47+
// неизменяемая
48+
val a = 0
49+
50+
// изменяемая
51+
var b = 1
52+
```
53+
{% endtab %}
54+
{% endtabs %}
55+
56+
В программе `val` переназначить нельзя.
57+
Появится ошибка компилятора, если попытаться её изменить:
58+
59+
{% tabs var-express-2 %}
60+
{% tab 'Scala 2 and 3' %}
61+
62+
```scala
63+
val msg = "Hello, world"
64+
msg = "Aloha" // ошибка "reassignment to val"; этот код не скомпилируется
65+
```
66+
{% endtab %}
67+
{% endtabs %}
68+
69+
И наоборот, `var` можно переназначить:
70+
71+
{% tabs var-express-3 %}
72+
{% tab 'Scala 2 and 3' %}
73+
74+
```scala
75+
var msg = "Hello, world"
76+
msg = "Aloha" // этот код скомпилируется, потому что var может быть переназначена
77+
```
78+
{% endtab %}
79+
{% endtabs %}
80+
81+
## Объявление типов переменных
82+
83+
Когда вы создаете переменную, то можете явно объявить ее тип или позволить компилятору его вывести:
84+
85+
{% tabs var-express-4 %}
86+
{% tab 'Scala 2 and 3' %}
87+
88+
```scala
89+
val x: Int = 1 // явно
90+
val x = 1 // неявно; компилятор выводит тип
91+
```
92+
{% endtab %}
93+
{% endtabs %}
94+
95+
Вторая форма известна как _вывод типа_, и это отличный способ сделать кратким код такого типа.
96+
Компилятор Scala обычно может определить тип данных за вас, как показано в выводе этих примеров REPL:
97+
98+
{% tabs var-express-5 %}
99+
{% tab 'Scala 2 and 3' %}
100+
101+
```scala
102+
scala> val x = 1
103+
val x: Int = 1
104+
105+
scala> val s = "a string"
106+
val s: String = a string
107+
108+
scala> val nums = List(1, 2, 3)
109+
val nums: List[Int] = List(1, 2, 3)
110+
```
111+
{% endtab %}
112+
{% endtabs %}
113+
114+
Вы всегда можете явно объявить тип переменной, если хотите,
115+
но в простых присваиваниях, подобных нижеследующим, в этом нет необходимости:
116+
117+
{% tabs var-express-6 %}
118+
{% tab 'Scala 2 and 3' %}
119+
120+
```scala
121+
val x: Int = 1
122+
val s: String = "a string"
123+
val p: Person = Person("Richard")
124+
```
125+
{% endtab %}
126+
{% endtabs %}
127+
128+
Обратите внимание, что при таком подходе код кажется более многословным, чем необходимо.
129+
130+
## Встроенные типы данных
131+
132+
Scala поставляется со стандартными числовыми типами данных, которые вы ожидаете,
133+
и все они являются полноценными экземплярами классов.
134+
В Scala все является объектом.
135+
136+
Эти примеры показывают, как объявлять переменные числовых типов:
137+
138+
{% tabs var-express-7 %}
139+
{% tab 'Scala 2 and 3' %}
140+
141+
```scala
142+
val b: Byte = 1
143+
val i: Int = 1
144+
val l: Long = 1
145+
val s: Short = 1
146+
val d: Double = 2.0
147+
val f: Float = 3.0
148+
```
149+
{% endtab %}
150+
{% endtabs %}
151+
152+
Поскольку `Int` и `Double` являются числовыми типами по умолчанию, то обычно они создаются без явного объявления типа:
153+
154+
{% tabs var-express-8 %}
155+
{% tab 'Scala 2 and 3' %}
156+
157+
```scala
158+
val i = 123 // по умолчанию Int
159+
val j = 1.0 // по умолчанию Double
160+
```
161+
{% endtab %}
162+
{% endtabs %}
163+
164+
В своем коде вы также можете добавлять символы `L`, `D` и `F` (и их эквиваленты в нижнем регистре) к числам,
165+
чтобы указать, что они являются `Long`, `Double` или `Float` значениями:
166+
167+
{% tabs var-express-9 %}
168+
{% tab 'Scala 2 and 3' %}
169+
170+
```scala
171+
val x = 1_000L // val x: Long = 1000
172+
val y = 2.2D // val y: Double = 2.2
173+
val z = 3.3F // val z: Float = 3.3
174+
```
175+
{% endtab %}
176+
{% endtabs %}
177+
178+
Когда вам нужны действительно большие числа, используйте типы `BigInt` и `BigDecimal`:
179+
180+
{% tabs var-express-10 %}
181+
{% tab 'Scala 2 and 3' %}
182+
183+
```scala
184+
var a = BigInt(1_234_567_890_987_654_321L)
185+
var b = BigDecimal(123_456.789)
186+
```
187+
{% endtab %}
188+
{% endtabs %}
189+
190+
Где `Double` и `Float` - это приблизительные десятичные числа, а `BigDecimal` используется для точной арифметики.
191+
192+
В Scala также есть типы данных `String` и `Char`:
193+
194+
{% tabs var-express-11 %}
195+
{% tab 'Scala 2 and 3' %}
196+
197+
```scala
198+
val name = "Bill" // String
199+
val c = 'a' // Char
200+
```
201+
{% endtab %}
202+
{% endtabs %}
203+
204+
### Строки
205+
206+
Строки Scala похожи на строки Java, но у них есть две замечательные дополнительные функции:
207+
208+
- Они поддерживают интерполяцию строк
209+
- Легко создавать многострочные строки
210+
211+
#### Строковая интерполяция
212+
213+
Интерполяция строк обеспечивает очень удобный способ использования переменных внутри строк.
214+
Например, учитывая эти три переменные:
215+
216+
{% tabs var-express-12 %}
217+
{% tab 'Scala 2 and 3' %}
218+
219+
```scala
220+
val firstName = "John"
221+
val mi = 'C'
222+
val lastName = "Doe"
223+
```
224+
{% endtab %}
225+
{% endtabs %}
226+
227+
Вы можете объединить эти переменные в строку следующим образом:
228+
229+
{% tabs var-express-13 %}
230+
{% tab 'Scala 2 and 3' %}
231+
232+
```scala
233+
println(s"Name: $firstName $mi $lastName") // "Name: John C Doe"
234+
```
235+
{% endtab %}
236+
{% endtabs %}
237+
238+
Просто поставьте перед строкой букву `s`, а затем поставьте символ `$` перед именами переменных внутри строки.
239+
240+
Чтобы вставить произвольные выражения в строку, заключите их в фигурные скобки:
241+
242+
{% tabs var-express-14 %}
243+
{% tab 'Scala 2 and 3' %}
244+
245+
``` scala
246+
println(s"2 + 2 = ${2 + 2}") // prints "2 + 2 = 4"
247+
248+
val x = -1
249+
println(s"x.abs = ${x.abs}") // prints "x.abs = 1"
250+
```
251+
{% endtab %}
252+
{% endtabs %}
253+
254+
Символ `s`, помещенный перед строкой, является лишь одним из возможных интерполяторов.
255+
Если использовать `f` вместо `s`, можно использовать синтаксис форматирования в стиле `printf` в строке.
256+
Кроме того, интерполятор строк - это всего лишь специальный метод, и его можно определить самостоятельно.
257+
Например, некоторые библиотеки баз данных определяют очень мощный интерполятор `sql`.
258+
259+
#### Многострочные строки
260+
261+
Многострочные строки создаются путем включения строки в три двойные кавычки:
262+
263+
{% tabs var-express-15 %}
264+
{% tab 'Scala 2 and 3' %}
265+
266+
```scala
267+
val quote = """The essence of Scala:
268+
Fusion of functional and object-oriented
269+
programming in a typed setting."""
270+
```
271+
{% endtab %}
272+
{% endtabs %}
273+
274+
> Дополнительные сведения о строковых интерполяторах и многострочных строках см. в главе [“Первое знакомство с типами”][first-look].
275+
276+
[first-look]: {% link _overviews/scala3-book/first-look-at-types.md %}

0 commit comments

Comments
 (0)