回應式程式設計
![本頁使用了標題或全文手工轉換](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
在計算中,回應式程式設計或反應式程式設計(英語: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.
|