2008年2月11日 星期一

Short-circuit evaluation

不少語言在AND和OR的運算子上都有短路評算的機制,意即當評算結果已經確定時,就立刻回傳結果,停正評算。例如:
if False and f() :      // 由於評算結果一定為假,故f()不會執行
    ...
if True or f() :        // 評算結果必為真,故f()不會執行
    ...
也就是說AND只有在前方運算式為真時才會執行後方運算式,OR只有在前方運算式為假時才會執行後方運算式。
事實上shell常用的&&和||就是使用了這個特性,回想一下常用的指令:apt-get update && apt-get upgradetest -x /sbin/iptables || exit 1cd / && rm -rf *等。只是要注意的是,shell是以0為真,其他值為假。
這也是為什麼我反對把主程式宣告成void的原因之一,各位可以去試試void main的程式會回傳什麼。很多時候,判斷一個程式正常執行與否不是看執行結果,而是主程式的return值,如果使用void就很難判斷到底有沒有執行成功。

沒有留言:

張貼留言