Как стать автором
Обновить

Комментарии 13

Статью можно было бы написать без использования RxJS. Да, мы бы лишились такого мощного заголовка, в котором эта библиотека упоминается, но всё-таки…
После теоретической части можно было бы реализовать свой Observer, да и познакомить с EventEmmiter, который в ноде.
А уж потом кратенько «вот так вот можно без велосипедов это сделать с rxjs».
Но это имхо. Успехов автору!
Спасибо за конструктив.
В следующих статьях я буду использовать примеры на rxjs. Поэтому и добавил его в название.
С остальным согласен. Думаю, что сделаю на этом акцент в будущем.
Че-то в первом разделе код примера одинаковый для разных случаев. Так и должно быть?

Извиняюсь, промахнулся с комментарием. Ниже дал ответ.

Да, все верно. Я хотел показать, как код будет вести себя при реактивном подходе(в комментариях в коде показано различие). Сам же пример далек от реальности и был приведен с целью упростить понимание.
Че-то туплю :(
Если код одинаковый, то как он может себя вести по разному на одинаковых данных? Поясните пожалуйста.
Да никак) если вы его выполните, то он выдаст одинаковый результат. Я хотел показать, как бы он «мог работать», если бы использовалась push стратегия, а не pull. Если бы я сразу привел код с использованием rxjs, то это усложнило бы его. А так я постарался оъяснить разницу на привычном всем императивном подходе.
Че-то я видно совсем тупой :(
Т.е. разница в pull и в push подходах в коментариях? Или надо как-от по разному вызывать код? Если не сильно напряжно, приведите пожалуйста в виде псеводкода разницу в подходах.
Код не надо вызывать по разному, нужно лишь увидеть различия в поведении. Можно сказать, что второй пример это и есть некий «псевдкокод», а не реальный вариант. В pull стретегии, чтобы узнать значение sum, нам нужно будет заново его посчитать: sum = a + b; В push оно посчитается само. Приведу аналогию с excel. У вас есть две ячейки: a(2), b(3). В третьей ячейке вы описываете формулу =A1+B1; Когда вы поменяете a, то значение в 3 ячейке посчитается само. Это и будет push стратегия.
Первый код на JS представляет некоторую практическую задачу (определить три значения, одно из которых равно сумме двух других). Затем автор рассуждает, что JS из-за своей семантики не позволяет прямо класть в код концепт потока и предлагает JS-подобный псевдоязык, какбы изменив семантику JS, который бы обладал нужными автору свойствами, описанными в коментариях. Поскольку конструкции JS не обладают нужной семантикой, приходится представлять концепты реактивного программирования (потоки, подписку, push-стратегию) сторонними средствами (шаблон/класс Observable, колбеки и т.п.). Автор уже это ответил, но я решил подробнее объяснить, как понимаю.

Мне интересно вот что: в ФП с иммутабельными данными любой тип эквивалентен безаргументной функции с точностью до расстановки пустых скобок. Если в примере представить a, b и sum (или хотя бы только sum) в виде безаргументной функции, формально добавив после присваивания () => и добавив () после каждой переменной, будет достигнуто то же поведение. Зачем необходим (т.е. какое место занимает) механизм подписки и линейная упорядоченность значений в реактивном программировании?
НЛО прилетело и опубликовало эту надпись здесь
Я правильно понял что возможны реактивные зацикливания? Например:
a = b + 3
b = a + 3
Зацикливания вполне можно создать, но не в вашем примере. Переменная a зависит от некоего источника b, который еще не был создан. Данный пример просто не заработает.
Но зацикливание можно получить, если подписаться на источник, и изменять его значение в ответ на изменение. Например, у вас есть некий буфер сообщений, который представляет собой поток. Вы подписываетесь на него. И в случае, когда вам придет новое сообщение, пытаетесь запушить новое. С обычным Observable это сложно провернуть, но вот используя Subject вполне.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории