響應式程式設計
在計算中,響應式程式設計或反應式程式設計(英語:Reactive programming)是一種面向數據串流和變化傳播的聲明式程式設計範式。這意味着可以在程式語言中很方便地表達靜態或動態的數據流,而相關的計算模型會自動將變化的值通過數據流進行傳播。
實例
[編輯]例如,在指令式程式設計環境中,表示將表達式的結果賦給,而之後改變或的值不會影響。但在響應式程式設計中,的值會隨着或的更新而更新。電子試算表程式就是響應式程式設計的一個例子。儲存格可以包含字面值或類似"=B1+C1"的公式,而包含公式的儲存格的值會依據其他儲存格的值的變化而變化 。
另一個例子是硬件描述語言,比如Verilog,這裏響應式程式設計可以對電路中傳播的訊號變化進行建模。
響應式程式設計最初是為了簡化互動式用戶介面的建立和即時系統動畫的繪製而提出來的一種方法,但它本質上是一種通用的程式設計範式。
例如,在MVC軟件架構中,響應式程式設計允許將相關模型的變化自動反映到視圖上,反之亦然[1]。
範式
[編輯]響應式程式設計範式基於Edward A. Lee和David G. Messerschmitt在1987年提出的同步數據流程程式設計範式[2],但是放鬆了即時限制。響應式程式設計範式介入了表示連續時變值的行為(behaviour),和表示離散值的事件。
概念
[編輯]外顯性的程度
[編輯]響應式程式語言包括從顯式的使用箭頭來表示數據流,到隱式的通過語言類似命令式或者函數式的語言架構衍生而來的數據流。例如,在隱式的函數式響應式程式設計中,一個函數呼叫可能隱式的導致一個節點在數據流圖中被建立出來。動態語言的響應式程式設計庫(例如Lisp的「Cells」和Python的「Trellis」等)可以在執行時通過對函數執行數值讀取的過程進行分析,構建出依賴圖,使得數據流不僅隱式,而且動態。
響應式程式設計的說法有時候會被用在軟件工程的架構分層中,這是數據流圖中所謂的節點只是能夠互相通訊的普通程式。
參見
[編輯]參照
[編輯]- ^ Trellis, Model-view-controller and the observer pattern, Tele community, [2020-05-02], (原始內容存檔於2016-03-03).
- ^ Synchronous Data Flow. [2021-02-15]. (原始內容存檔於2020-08-04).
外部連結
[編輯]- 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.
- MIMOSA Project of INRIA - ENSMP(頁面存檔備份,存於互聯網檔案館), a general site about reactive programming.