電腦程式設計中,(guard)是布爾表達式,其結果必須為真,程序才能執行下去。衛語句guard codeguard clause)用於檢查先決條件。衛語句的用途,例如:

  • 引用(reference)使用前檢查是否為空引用;
  • 處置模式英語dispose pattern使用一個布爾域,使得釋放資源操作成為冪等運算,即多次釋放資源等效於只釋放一次。

概述

編輯

衛語句可用於子進程提前退出(early exit),這是結構化程序設計的一種常見偏離,可刪除一層嵌套使得代碼更扁平:[1]if guard { ... }替代為:if not guard: return; ....

APLHaskellCleanErlangoccamPromela英語PromelaOCamlSwift[2]Scala程序設計語言中,這一術語有特殊含義。

Mathematica中,衛被稱為約束(constraints)。

形式化方法的一種語言,守衛命令語言中,衛是基礎概念。

在增強的模式匹配中,衛語句用於跳過一些即使結構匹配的模式。

條件語句中的布爾表達式也符合衛的定義,雖然被稱作「條件」。

下述Haskell語言的例子,衛出現在每對"|"與"="之間:

f x
 | x > 0 = 1
 | otherwise = 0

這類似於如下的數學表示的"if"與"otherwise" 子句就是衛語句:

 

如果有多個平行的衛語句,則按照自頂向下順序,第一個通過的分支被選擇。

例子

編輯
public string Foo(string username) {
    if (username == null) {
        throw new ArgumentNullException(nameof(username));
    }
    // Rest of the method code follows here...
}

參考文獻

編輯
  1. ^ Beck, Kent. Guard Clause. Smalltalk Best Practice Patterns,. 1997: 178–179. 
  2. ^ Cook, Nate. guard & defer. NSHipster. [2016-02-26]. (原始內容存檔於2020-11-25). 

外部連結

編輯
  NODES