Привет, если вы так или иначе соприкасались со сферой разработок программного обеспечения, наверное, вам приходилось слышать про такой термин как «реактивное программирование». Этот пост будет о об этом, здесь мы постараемся разобраться с этим термином и тем что он означает.
Итак, фраза «реактивное программирование» будучи незнакомым с этим термином может возникнуть ассоциация с некой техникой программирования, при которой достигается высокая скорость написания кода, или что-то в этом роде. На самом деле этот термин обозначает другое, давайте рассмотрим простой пример.
Для лучшего понимания давайте возьмем простую алгебраическую задачу:
a = b + c
В математическом представлении в качестве значения «a» будет присвоен результат сложения «b» и «с».
В императивном программировании в качестве результата в переменную «a» будет присвоено значение суммы переменных «b» и «с» в момент вычисления. После этого если скажем значение переменной «b» поменяется в последующем, это уже никак не влияет на результат, т.е. на значение переменной «a».
Реактивное программирование предусматривает автоматический пересчёт значения переменной «a», если хотя-бы одна из переменных «b» или «с» получит новое значение.
Если вы работали в табличных редакторах, к примеру, Excel, то там вы могли наблюдать работу табличных процессоров, которые в свою очередь являются хорошим примером реактивного программирования. К примеру, одна из ячеек таблицы может содержать строковые значения, либо формулу, связанную с другими ячейками, допустим это «=B1+C1». В случае если значение в ячейках B1 либо C1 меняется, то значение в целевой ячейке будет обновлено самостоятельно.
Реактивное программирование предлагалось как путь для лёгкого создания пользовательских интерфейсов, анимации или моделирования систем, изменяющихся во времени.
В MVC архитектуре с помощью реактивного программирования можно реализовать автоматическое отражение изменений из Model в View и наоборот из View в Model.
Таким образом, реактивное программирование является парадигмой программирования, которая ориентирована на потоки данных и распространение изменений. Это означает, что должна существовать возможность легко выражать статические и динамические потоки данных, а также то, что нижележащая модель исполнения должна автоматически распространять изменения благодаря потоку данных.