遠隔作用(Action at a distance)是一種程式設計中的反模式,是指程式某一部份的行為會廣泛的受到程式其他部份指令的影響,而且要找到影響其他程式的指令很困難,甚至根本無法進行。
避免遠隔作用的方法是避免使用全域變數,利用可控制的區域變數來調整資料,或是使用有參照透明度的純函數程式語言。
此詞語的由來是來自物理學中的遠距作用,是指一個物體在和另一物體中間沒有粒子交換的情形下,影響另一物體的現象,量子力學的量子纏結就是遠距作用的一個例子,愛因斯坦將此稱為「鬼魅似的遠距作用」(spooky action-at-a-distance)。
遠隔作用造成的程序錯誤常是因為程式模組的特定機能在錯誤的時間動作,或是影響了不應當影響的變數。不過很難找出是哪一個模組造成的影響。一些看似沒有問題的動作的副作用使得程式在一個未知的狀態中,因此局部的資料也可能不是局部的,有可能受到其他模組的影響。改善遠隔作用的方式是定義一個模組可以影響模組的範圍。若在軟體設計時準確的定義各模組之間的介面,避免使用共享的資料或是全域變數,可以大幅減少遠隔作用造成的問題。
藉由物件的遠隔作用
有些物件導向程式設計設計原則也可以避免遠隔作用。得墨忒耳定律提到一個物件只能影響它鄰近的物件。若物體之間有必要有遠隔作用,必需用訊息傳遞的方式進行。適當的設計可以大幅限制遠隔作用的發生,因此也使系統比較容易維護。不良的介面設計會造成不羈的對象,上帝對象或是其他不依照得墨忒耳定律的物件。
程式語言的好處是減少遠隔作用出現的可能性,若是使用純函數程式語言,甚至根本不會出現遠隔作用。
相關條目
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.