计算机程序设计中,(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). 

外部链接