a;編程
b;編程語言
c;函數式編程
...函數
這樣的程序蘊含着若是a成功那麼執行b, 若是b成功那麼執行c的邏輯. 編碼
代碼只能這樣列. 或者說至少當前來講, 絕大多數編碼型的系統都是這麼列的. 這意味着全部手動編碼的程序都默認認可或接受了這個邏輯.日誌
可是, 實際上在大多數時候我想要的並非這樣的. 好比, 我想要的實際上是: 作a, b, c. 無論中間出現什麼問題, 我想要事情這樣工做. 那麼這時就應該至少用try...catch塊把它們給分別包起來. 事務
我認可大多數程序都有按順序執行的要求. 可是這樣的要求太簡單, 很容易出問題. 由於它沒有說起在異常產生的時候怎麼辦.編譯
錯誤必須獲得正確的處理. 不然正常的流程都將受到影響.程序
還有一個隱含的邏輯是, a, b, c三者是同等重要的. 但這其實並非全部的情形. 好比 b 只是一個日誌方法, 它可能成功, 也可能不成功, 可是我以爲它不夠a與c同等重要. 也就是說, 當b失敗時, 我不認爲整個流程就失敗了. 我認爲b失敗了就是b失敗了. 但若是a或c失敗了, 我則認爲整個流程都失敗了. 我甚至可能回滾整個操做, 若是可能的話. 這也是事務的一個由來.方法
a的不出錯, 是b與c的前置條件. 同時, b的不出錯, 是c的前置條件. 這些並不符合事實. 好比, 我說停掉機器1, 停掉機器2, 停掉機器3. 由於大多數語言都沒有提供"徹底無依賴"的語義(這就是高級語言由機器語言發展而來的一個壞處------由於機器只能執行順序指令------可能部分函數式編程語言有提供這種語義), 因此在大多數語言中, 指令將最終被編譯成時間相關(依賴)的操做集.