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
Copy file name to clipboardExpand all lines: Part 1 - Getting Started/2. Key types.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,10 +35,10 @@ interface Observer<T> {
35
35
```
36
36
Эти три метода являются поведением, которое описывает реакцию наблюдателя на сообщение от observable. <b>onNext </b>у наблюдателя будет вызван 0 или более раз, опционально сопровождаясь <b>onCompleted </b>или <b>onError</b>. После них вызовов больше не будет.
37
37
38
-
Разрабатывая код с помощью Rx, вы увидите много <b>Observable</b>, но намного меньше <b>Observer</b>. И хотя и необходимо понимать концепцию <b>Observer</b>, существуют способы не требующие непосредственного создания его экземпляра.
38
+
Разрабатывая код с помощью Rx, вы увидите много <b>Observable</b>, но намного меньше <b>Observer</b>. И хотя и необходимо понимать концепцию <b>Observer</b>, существуют способы, не требующие непосредственного создания его экземпляра.
39
39
40
40
<h2>Реализация Observable и Observer</h2>
41
-
Вы можете вручную реализовать <b>Observer </b>и <b>Observable</b>. В реальности в этом, как правило, нет необходимости: Rx предоставляет готовые решения, чтобы упростить разработку. Это также может быть не совсем безопасно, поскольку взаимодействие между частями библиотеки Rx включает в себя принципы и внутреннюю инфраструктуру, которые могут быть не очевидны новичку. В любом случае, будет проще для начала использовать множество инструментов уже предоставленных библиотекой для создания необходимого нам функционала.
41
+
Вы можете вручную реализовать <b>Observer </b>и <b>Observable</b>. В реальности в этом, как правило, нет необходимости: Rx предоставляет готовые решения, чтобы упростить разработку. Это также может быть не совсем безопасно, поскольку взаимодействие между частями библиотеки Rx включает в себя принципы и внутреннюю инфраструктуру, которые могут быть неочевидны новичку. В любом случае, будет проще для начала использовать множество инструментов, уже предоставленных библиотекой для создания необходимого нам функционала.
42
42
43
43
Чтобы подписаться на observable, совсем нет необходимости в реализации <b>Observer</b>. Существуют другие перегрузки метода <b>subscribe</b>, которые принимают в качестве аргументов соответствующие функции для <b>onNext</b>, <b>onError </b>и <b>onSubscribe</b>, инкапсулирующие создание экземпляра <b>Observer</b>. Предоставлять их всех тоже не обязательно, вы можете описать только часть из них, например, только <b>onNext </b>или только <b>onNext </b>и <b>onError</b>.
44
44
@@ -68,17 +68,17 @@ public static void main(String[] args) {
68
68
3
69
69
4
70
70
```
71
-
Как мы видим,<b> 1</b> не была напечатана из-за того, что мы не были подписаны в момент когда она была передана. После того как мы подписались, мы начали получать все значения поступающие в subject.
71
+
Как мы видим,<b> 1</b> не была напечатана из-за того, что мы не были подписаны в момент, когда она была передана. После того как мы подписались, мы начали получать все значения, поступающие в subject.
72
72
73
-
Здесь мы впервые используем метод <b>subscribe</b>, так что стоит уделить этому внимание. В данном случае мы используем перегруженную версию, которая принимает один объект класса <ahref="http://reactivex.io/RxJava/javadoc/rx/functions/Function.html">Function</a>, отвечающий за <b>onNext</b>. Эта функция принимает значение типа Integer и ничего не возвращает. Функции, которые ничего не возвращают также называются actions. Мы можем передать эту функцию следующими способами:
73
+
Здесь мы впервые используем метод <b>subscribe</b>, так что стоит уделить этому внимание. В данном случае мы используем перегруженную версию, которая принимает один объект класса <ahref="http://reactivex.io/RxJava/javadoc/rx/functions/Function.html">Function</a>, отвечающий за <b>onNext</b>. Эта функция принимает значение типа Integer и ничего не возвращает. Функции, которые ничего не возвращают, также называются actions. Мы можем передать эту функцию следующими способами:
74
74
<ul>
75
75
<li>Предоставить объект класса <b>Action1<Integer></b></li>
76
-
<li>Неявно создать таковой используя <ahref="https://en.wikipedia.org/wiki/Anonymous_function#Java">лямбда-выражение</a></li>
76
+
<li>Неявно создать таковой, используя <ahref="https://en.wikipedia.org/wiki/Anonymous_function#Java">лямбда-выражение</a></li>
77
77
<li>Передать ссылку на существующий метод с соответствующей сигнатурой. В данном случае, <b>System.out::println</b> имеет перегруженную версию, которая принимает <b>Object</b>, поэтому мы передаем ссылку на него. Таким образом, подписка позволяет нам печатать в основной поток вывода все поступающие в <b>Subject </b>числа.</li>
78
78
</ul>
79
79
80
80
<h2>ReplaySubject</h2>
81
-
<b>ReplaySubject</b> имеет специальную возможность кэшировать все поступившие в него данные. Когда у него появляется новый подписчик, последовательность выдана ему начиная с начала. Все последующие поступившие данные будут выдаваться подписчикам как обычно.
81
+
<b>ReplaySubject</b> имеет специальную возможность кэшировать все поступившие в него данные. Когда у него появляется новый подписчик, последовательность выдается ему, начиная с начала. Все последующие поступившие данные будут выдаваться подписчикам как обычно.
82
82
83
83
```JAVA
84
84
ReplaySubject<Integer> s =ReplaySubject.create();
@@ -97,7 +97,7 @@ Late: 1
97
97
Early:2
98
98
Late:2
99
99
```
100
-
Все значения были получены, не смотря на то, что один из подписчиков подписался позже другого. Обратите внимание, что до того как получить новое значение, подписчик получает все пропущенные. Таким образом, порядок последовательности для подписчика не нарушен.
100
+
Все значения были получены, несмотря на то, что один из подписчиков подписался позже другого. Обратите внимание, что до того как получить новое значение, подписчик получает все пропущенные. Таким образом, порядок последовательности для подписчика не нарушен.
101
101
102
102
Кэшировать всё подряд не всегда лучшая идея, так как последовательности могут быть длинными или даже бесконечными. Фабричный метод <b>ReplaySubject.createWithSize</b> ограничивает размер буфера, а <b>ReplaySubject.createWithTime</b> время, которое объекты будут оставаться в кеше.
103
103
@@ -166,10 +166,10 @@ s.onNext(1);
166
166
0
167
167
1
168
168
```
169
-
Так как роль <b>BehaviorSubject </b>– всегда иметь доступные данные, считается неправильным создавать его без начального значения, также как и завершать его.
169
+
Так как роль <b>BehaviorSubject </b>– всегда иметь доступные данные, считается неправильным создавать его без начального значения так же, как и завершать его.
170
170
171
171
<h2>AsyncSubject</h2>
172
-
<b>AsyncSubject </b>также хранит последнее значение. Разница в том, что он не выдает данных до тех пока не завершится последовательность. Его используют, когда нужно выдать единое значение и тут же завершиться.
172
+
<b>AsyncSubject </b>также хранит последнее значение. Разница в том, что он не выдает данных до тех пор, пока не завершится последовательность. Его используют, когда нужно выдать единое значение и тут же завершиться.
173
173
174
174
```JAVA
175
175
AsyncSubject<Integer> s =AsyncSubject.create();
@@ -186,7 +186,7 @@ s.onCompleted();
186
186
Обратите внимание, что если бы мы не вызвали <b>s.onCompleted()</b>, этот код ничего бы не напечатал.
187
187
188
188
<h2>Неявная инфраструктура</h2>
189
-
Как мы уже упоминали, существуют принципы, которые могут быть не очевидны в коде. Один из важнейших заключается в том, что ни одно событие не будет выдано после того, как последовательность завершена (<b>onError </b>или <b>onCompleted</b>). Реализация <b>subject</b>’ уважает эти принципы:
189
+
Как мы уже упоминали, существуют принципы, которые могут быть неочевидны в коде. Один из важнейших заключается в том, что ни одно событие не будет выдано после того, как последовательность завершена (<b>onError </b>или <b>onCompleted</b>). Реализация <b>subject</b>’ уважает эти принципы:
190
190
191
191
```JAVA
192
192
Subject<Integer, Integer> s =ReplaySubject.create();
@@ -205,7 +205,7 @@ s.onNext(2);
205
205
<anchor>notes</anchor>
206
206
[1] Или знакомые всем Event Listeners. – <i>Примеч. Автора</i>
207
207
[2] Я, все-таки считаю, что ключевой перегрузкой тут является именно версия с Observer в качестве аргумента, в оригинале в качестве примера приводится версия subscribe(Subscriber<? super T> subscriber) – <i>Примеч. Автора</i>
208
-
[3] Я буду использовать слово «выдавать» чтобы описать событие передачи данных от Observable Observer’у (to emit в ориг.). – <i>Примеч. Автора</i>
208
+
[3] Я буду использовать слово «выдавать», чтобы описать событие передачи данных от Observable Observer’у (to emit в ориг.). – <i>Примеч. Автора</i>
209
209
[4] Автор использует термин последовательность (sequence), чтобы обозначить множество всех данных, которые может выдать Observable. – <i>Примеч. Автора</i>
0 commit comments