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 предлагает простую запись для выражения *последовательных преобразований*. Такие преобразования представлены в виде `for синтаксиса` и записывается как `for (enumerators) yield e`, где `enumerators` относятся к списку перечислений, разделенных точкой с запятой. Отдельный элемент (*enumerator*) является либо генератором, который вводит новые переменные, либо фильтром. Представление for вычисляет тело `e` (которое связанно с тем что генерирует *enumerator*) и возвращает последовательность вычислений.
16
+
Scala предлагает простую запись для выражения *последовательных преобразований*. Эти преобразования можно упростить используя специальный синтаксис `for выражения` (for comprehension), который записывается как `for (enumerators) yield e`, где `enumerators` относятся к списку перечислителей, разделенных точкой с запятой. Где отдельный такой "перечислитель" (*enumerator*) является либо генератором, который вводит новые переменные, либо фильтром. For-выражение вычисляет тело `e` (которое связанно с тем что генерирует *enumerator*) и возвращает последовательность вычислений.
17
17
18
18
Вот пример:
19
19
@@ -30,7 +30,7 @@ val twentySomethings = for (user <- userBase if (user.age >=20 && user.age < 30)
Представление`for`, используется с оператором `yield`, на самом деле создает `List`. Потому что мы указали `yield user.name` (то есть вывести имя пользователя), получаем `List[String]`. `user <- userBase` и есть наш генератор, а `if (user.age >=20 && user.age < 30)` - это фильтр который отфильтровывает пользователей, не достигших 20-летнего возраста.
33
+
`for`-выражение, используется с оператором `yield`, на самом деле создает `List`. Потому что мы указали `yield user.name` (то есть вывести имя пользователя), получаем `List[String]`. `user <- userBase` и есть наш генератор, а `if (user.age >=20 && user.age < 30)` - это фильтр который отфильтровывает пользователей, не достигших 20-летнего возраста.
34
34
35
35
Ниже приведен более сложный пример использования двух генераторов. Он вычисляет все пары чисел между `0` и `n-1`, сумма которых равна заданному значению `v`:
Обратите внимание, что for представление не ограничивается только работой со списками. Каждый тип данных, поддерживающий операции `withFilter`, `map`, and `flatMap` (с соответствующими типами), может быть использован в for представлении.
55
+
Обратите внимание, что for-выражение не ограничивается только работой со списками. Каждый тип данных, поддерживающий операции `withFilter`, `map`, and `flatMap` (с соответствующими типами), может быть использован в for-выражении.
56
56
57
-
Вы можете обойтись без `yield` в for представлении. В таком случае, результатом будет `Unit`. Такое может быть полезным для выполнения кода основанного на побочных эффектах. Вот программа, эквивалентная предыдущей, но без использования `yield`:
57
+
Вы можете обойтись без `yield` в for-выражении. В таком случае, результатом будет `Unit`. Это может быть полезным для выполнения кода основанного на побочных эффектах. Вот программа, эквивалентная предыдущей, но без использования `yield`:
Обобщенные классы - это классы, которые принимают тип в качестве параметра. Они особенно полезны для создания коллекций классов.
16
+
Обобщенные классы (Generic classes) - это классы, обладающие параметрическим полиморфизмом (т. е. классы, которые изменяют свое поведение в зависимости от приписываемого им типа. Этот тип указывается в квадратных скобках `[]` сразу после имени класса). Они особенно полезны для создания коллекций.
17
17
18
18
## Объявление обобщенного класса
19
-
Обобщенные классы принимают тип в качестве параметра в квадратных скобках `[]`. По соглашению обычно используют буквы `A` в качестве имени параметра типа, хотя можно использовать любое имя.
19
+
Для объявления обобщенного класса необходимо после имени добавить еще один параметр "тип класса" в квадратных скобках `[]`. По соглашению обычно используют заглавные буквы `A` в качестве указания, на новый параметр "тип класса", хотя можно использовать любое имя.
20
20
```tut
21
21
class Stack[A] {
22
22
private var elements: List[A] = Nil
@@ -33,7 +33,7 @@ class Stack[A] {
33
33
34
34
## Использование
35
35
36
-
Чтобы использовать обобщенный класс, поместите тип в квадратные скобки вместо `A`.
36
+
Чтобы использовать обобщенный класс, поместите конкретный тип в квадратные скобки вместо `A`.
0 commit comments