Skip to content

Commit 496cac9

Browse files
committed
👌 Updating for-comprehensions and generic-classes.
Took 1 hour 9 minutes
1 parent 036132c commit 496cac9

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

_ru/tour/for-comprehensions.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
layout: tour
3-
title: Представление вида For
3+
title: Сложные for-выражения
44

55
discourse: true
66

@@ -13,7 +13,7 @@ previous-page: extractor-objects
1313

1414
---
1515

16-
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*) и возвращает последовательность вычислений.
1717

1818
Вот пример:
1919

@@ -30,7 +30,7 @@ val twentySomethings = for (user <- userBase if (user.age >=20 && user.age < 30)
3030
3131
twentySomethings.foreach(name => println(name)) // выводит "Travis Dennis"
3232
```
33-
Представление `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-летнего возраста.
3434

3535
Ниже приведен более сложный пример использования двух генераторов. Он вычисляет все пары чисел между `0` и `n-1`, сумма которых равна заданному значению `v`:
3636

@@ -52,9 +52,9 @@ foo(10, 10) foreach {
5252
(0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (0, 5) (0, 6) (0, 7) (0, 8) (0, 9) (1, 1) ...
5353
```
5454

55-
Обратите внимание, что for представление не ограничивается только работой со списками. Каждый тип данных, поддерживающий операции `withFilter`, `map`, and `flatMap` (с соответствующими типами), может быть использован в for представлении.
55+
Обратите внимание, что for-выражение не ограничивается только работой со списками. Каждый тип данных, поддерживающий операции `withFilter`, `map`, and `flatMap` (с соответствующими типами), может быть использован в for-выражении.
5656

57-
Вы можете обойтись без `yield` в for представлении. В таком случае, результатом будет `Unit`. Такое может быть полезным для выполнения кода основанного на побочных эффектах. Вот программа, эквивалентная предыдущей, но без использования `yield`:
57+
Вы можете обойтись без `yield` в for-выражении. В таком случае, результатом будет `Unit`. Это может быть полезным для выполнения кода основанного на побочных эффектах. Вот программа, эквивалентная предыдущей, но без использования `yield`:
5858

5959
```tut
6060
def foo(n: Int, v: Int) =

_ru/tour/generic-classes.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ previous-page: for-comprehensions
1313
assumed-knowledge: classes unified-types
1414

1515
---
16-
Обобщенные классы - это классы, которые принимают тип в качестве параметра. Они особенно полезны для создания коллекций классов.
16+
Обобщенные классы (Generic classes) - это классы, обладающие параметрическим полиморфизмом (т. е. классы, которые изменяют свое поведение в зависимости от приписываемого им типа. Этот тип указывается в квадратных скобках `[]` сразу после имени класса). Они особенно полезны для создания коллекций.
1717

1818
## Объявление обобщенного класса
19-
Обобщенные классы принимают тип в качестве параметра в квадратных скобках `[]`. По соглашению обычно используют буквы `A` в качестве имени параметра типа, хотя можно использовать любое имя.
19+
Для объявления обобщенного класса необходимо после имени добавить еще один параметр "тип класса" в квадратных скобках `[]`. По соглашению обычно используют заглавные буквы `A` в качестве указания, на новый параметр "тип класса", хотя можно использовать любое имя.
2020
```tut
2121
class Stack[A] {
2222
private var elements: List[A] = Nil
@@ -33,7 +33,7 @@ class Stack[A] {
3333

3434
## Использование
3535

36-
Чтобы использовать обобщенный класс, поместите тип в квадратные скобки вместо `A`.
36+
Чтобы использовать обобщенный класс, поместите конкретный тип в квадратные скобки вместо `A`.
3737
```
3838
val stack = new Stack[Int]
3939
stack.push(1)

0 commit comments

Comments
 (0)