You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Классы в Scala являются основами для создания объектов. Они могут содержать методы, константы, переменные, типы, объекты, трейты и классы, которые в совокупности называются _членами_. Типы, объекты и трейты будут рассмотрены позже в ходе нашего обзора.
14
14
15
15
## Объявление класса
16
+
16
17
Минимальное объявление класса - это просто ключевое слово `class` и его имя. Имена классов должны быть написаны с заглавной буквы.
Ключевое слово `new` используется для создания экземпляра класса. `User` имеет конструктор по умолчанию, который не принимает аргументов, так как конструктор не был определен. Однако обычно используется и конструктор, и тело класса. Пример объявления класса Point приведен ниже:
28
+
29
+
Ключевое слово `new` используется для создания экземпляра класса.
30
+
{% endtab %}
31
+
32
+
{% tab 'Scala 3' for=class-minimal-user %}
33
+
34
+
```scala
35
+
classUser
36
+
37
+
valuser1=User()
38
+
```
39
+
40
+
Чтобы создать экземпляр класса, мы вызываем его как функцию: `User()`.
41
+
Также можно явно использовать ключевое слово `new`: `new User()` - хотя обычно это опускается.
42
+
{% endtab %}
43
+
44
+
{% endtabs %}
45
+
46
+
`User` имеет конструктор по умолчанию, который не принимает аргументов, так как конструктор не был определен. Однако обычно используется и конструктор, и тело класса. Пример объявления класса Point приведен ниже:
@@ -34,72 +62,228 @@ class Point(var x: Int, var y: Int) {
34
62
}
35
63
36
64
valpoint1=newPoint(2, 3)
37
-
point1.x // 2
38
-
println(point1) // prints (2, 3)
65
+
println(point1.x) // выводит 2
66
+
println(point1) // выводит (2, 3)
67
+
```
68
+
69
+
{% endtab %}
70
+
71
+
{% tab 'Scala 3' for=class-point-example %}
72
+
73
+
```scala
74
+
classPoint(varx:Int, vary:Int):
75
+
76
+
defmove(dx: Int, dy: Int):Unit=
77
+
x = x + dx
78
+
y = y + dy
79
+
80
+
overridedeftoString:String=
81
+
s"($x, $y)"
82
+
endPoint
83
+
84
+
valpoint1=Point(2, 3)
85
+
println(point1.x) // выводит 2
86
+
println(point1) // выводит (2, 3)
39
87
```
40
88
89
+
{% endtab %}
90
+
91
+
{% endtabs %}
92
+
41
93
В этом классе у `Point` есть четыре члена: переменные `x` и `y` и методы `move` и `toString`.
42
94
В отличие от многих других языков, основной конструктор находится в сигнатуре класса `(var x: Int, var y: Int)`. Метод `move` принимает два целочисленных аргумента и возвращает значение Unit `()` - это пустое множество, которое не содержит никакой информации. Примерно соответствует `void` в Java-подобных языках. С другой стороны, `toString` не принимает никаких аргументов, а возвращает значение `String`. Поскольку `toString` переопределяет `toString` из [`AnyRef`](unified-types.html), он помечается ключевым словом `override`.
43
95
44
96
## Конструкторы
45
97
46
98
Конструкторы могут иметь необязательные параметры, если указать их значения по умолчанию как в примере:
В этой версии класса `Point`, `x` и `y` имеют значение по умолчанию `0`, поэтому аргументов не требуется. Однако, поскольку конструктор считывает аргументы слева направо, если вы просто хотите передать значение `y`, то вам нужно будет указать задаваемый параметр.
Что также является хорошей практикой для повышения ясности кода.
65
155
66
156
## Скрытые члены и синтаксис Геттер/Сеттер (получатель/установщик значений)
157
+
67
158
По умолчанию члены класса являются открытыми для внешнего доступа (публичными). Используйте модификатор `private`, чтобы скрыть их от внешнего доступа.
В данной версии класса `Point` данные хранятся в скрытых переменных `_x` и `_y`. Существуют методы `def x` и `def y` для доступа к скрытым данным. Методы `def x_=` и `def y_=` (сеттеры) предназначены для проверки и установки значения `_x` и `_y`. Обратите внимание на специальный синтаксис для сеттеров: метод `_=` применяется к имени геттера.
В данной версии класса `Point` данные хранятся в скрытых переменных `_x` и `_y`. Существуют методы `def x` и `def y` для доступа к скрытым данным. Методы `def x_=` и `def y_=` (сеттеры) предназначены для проверки и установки значения `_x` и `_y`. Обратите внимание на специальный синтаксис для сеттеров: метод `_=` применяется к имени геттера.
92
233
93
234
Первичные параметры конструктора с параметрами `val` и `var` являются общедоступными. Однако, поскольку `val` - это константа, то нельзя писать следующее.
0 commit comments