短路求值

维基百科,自由的百科全书
跳转至: 导航搜索
求值策略

及早求值
惰性求值
部分求值
远程求值
短路求值

最小化计算Short-circuit evaluation,也叫做短路计算),是一种计算策略,表达式只有在取得最後值的時候,才會進行計算。这意味着在某些情况下它不需要计算一个表达式的所有部分。

例子 [编辑]

考虑以下使用C语言写的例子:

int a = 0;
if (a && myfunc(b)) {
    do_something();
}

在这个例子中,最小化计算使得myfunc(b)永远不会被调用。这是因为 a 等于false,而false AND q无论q是什么总是得到false。这个特性允許兩個有用的編程結構。首先,不論判別式中第一個子判別語句要耗費多昂貴的計算,總是會被執行,若此時求得的值為 false,則第二個子判別運算將不會執行,這可以節省來自第二個語句的昂貴計算。再來,這個結構可由第一個子判別語句來避免第二個判別語句不會導致運行時錯誤。例如對以下使用C语言寫的例子而言,最小化計算可以避免對空指针進行存取。

void * p = NULL;
int ret;
/* ... */
if(p && ret = func(p) ){
    /* 或者另一种更清晰的写法是if( (p != NULL) && (ret = func(p)) ) */
    /* ... */
}
/* ... */

當使用最小化計算時,很重要的一點是得知表示式取值的順序。某些編程語言中確保有一致的取值順序。例如:C语言JavaPerlPythonRuby等。

它不过是下面语句的一种更加紧凑的表示形式罢了。

if (cond_a) {
    if (expensive_or_dangerous_cond_b) {
        ...
    }
}

参见 [编辑]