在计算中,反应式编程或响应式编程()是一种面向数据串流和变化传播的声明式编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
实例
例如,在命令式编程环境中,a := b + c 表示将表达式的结果赋给a,而之后改变b或c的值不会影响a。但在反应式编程中,a的值会随着b或c的更新而更新。电子表格程序就是反应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化 。
另一个例子是硬件描述语言,比如Verilog,这里反应式编程可以对电路中传播的信号变化进行建模。
反应式编程最初是为了简化交互式用户界面的创建和实时系统动画的绘制而提出来的一种方法,但它本质上是一种通用的编程范式。
例如,在MVC软件架构中,反应式编程允许将相关模型的变化自动反映到视图上,反之亦然。
范型
反应式编程范型基于和在1987年提出的同步数据流程编程范型,但是放松了实时限制。反应式编程范型介入了表示连续时变值的行为(behaviour),和表示离散值的事件。
概念
外显性的程度
反应式编程语言包括从显式的使用箭头来表示数据流,到隐式的通过语言类似命令式或者函数式的语言架构衍生而来的数据流。例如,在隐式的函数式反应式编程中,一个函数调用可能隐式的导致一个节点在数据流图中被创建出来。动态语言的反应式编程库(例如Lisp的“Cells”和Python的“Trellis”等)可以在运行时通过对函数执行数值读取的过程进行分析,构建出依赖图,使得数据流不仅隐式,而且动态。
反应式编程的说法有时候会被用在软件工程的架构分层中,这是数据流图中所谓的节点只是能够互相通信的普通程序。
参见
*函数式反应式编程
引用
外部链接
- [https://soft.vub.ac.be/Publications/2012/vub-soft-tr-12-13.pdf A survey on reactive programming] A paper by E. Bainomugisha, A. Lombide Carreton, T. Van Cutsem, S. Mostinckx, and W. De Meuter that surveys and provides a taxonomy of existing reactive programming approaches.
- [https://www-sop.inria.fr/mimosa/rp/generalPresentation/index.html MIMOSA Project of INRIA - ENSMP], a general site about reactive programming.
评论 (0)