远隔作用 (计算机科学)

远隔作用Action at a distance)是一種程式設計中的反模式,是指程式某一部份的行為會廣泛的受到程式其他部份指令的影響,而且要找到影響其他程式的指令很困難,甚至根本無法進行。

避免远隔作用的方法是避免使用全域變數,利用可控制的區域變數來調整資料,或是使用有参照透明度英语Referential transparency (computer science)純函數程式語言

此詞語的由來是來自物理學中的遠距作用,是指一個物體在和另一物體中間沒有粒子交換的情形下,影響另一物體的現象,量子力學量子纏結就是遠距作用的一個例子,愛因斯坦將此稱為「鬼魅似的遠距作用」(spooky action-at-a-distance)。

远隔作用造成的程序错误常是因為程式模組的特定機能在錯誤的時間動作,或是影響了不應當影響的變數。不過很難找出是哪一個模組造成的影響。一些看似沒有問題的動作的副作用使得程式在一個未知的狀態中,因此局部的資料也可能不是局部的,有可能受到其他模組的影響。改善远隔作用的方式是定義一個模組可以影響模組的範圍。若在軟體設計時準確的定義各模組之間的介面,避免使用共享的資料或是全域變數,可以大幅減少远隔作用造成的問題。

藉由物件的远隔作用

有些物件導向程式設計設計原則也可以避免远隔作用。得墨忒耳定律提到一個物件只能影響它鄰近的物件。若物體之間有必要有远隔作用,必需用訊息傳遞的方式進行。適當的設計可以大幅限制远隔作用的發生,因此也使系統比較容易維護。不良的介面設計會造成不羁的对象英语object orgy上帝对象或是其他不依照得墨忒耳定律的物件。

程式語言的好處是減少远隔作用出現的可能性,若是使用純函數程式語言,甚至根本不會出現远隔作用。

相關條目