2012年2月27日星期一

TJS教學(補充篇)---short-circuit evaluation,捷徑計算

(k ゚∀゚)<short-circuit evaluation的翻譯可說是五花八門,可以稱為捷徑計算、短路計算、最小化計算等等,在不少程式語言裡,當表達式的結果已經確定時,程式就不會再進行運算,吉里吉里亦有採用這種運算策略。

為什麼要這樣做?>( ゚ω゚ s)

(k ゚∀゚)<它的好處是減少不必要的運算,因為結果已經確定了,就不必浪費時間去運算,看看以下的範例。

var a=0;
var b=7;
if(a && b%2==1)
    System.inform("條件式是true");
else
    System.inform("條件式是false");

(k ゚∀゚)<由於AND左邊的a已經是false,無論右邊的結果是什麼,最後都是得到false,所以b%2==1是不會運算的,以下是運算的步驟。

a && b%2==1
0 && b%2==1    //已經確定是false
0

的確減省了不少運算啊。>( ゚ω゚ s)

(k ゚∀゚)<不過有時候這導致運算錯誤,看看以下的範例。

var a=1;
var b=1;
var c=a++ || b++;
System.inform("a="+a+" ,b="+b+" ,c="+c);










(k ゚∀゚)<在上述的範例裡,結果卻十分有趣,雖然我們寫了b++,但b的值最後並沒有増加,這因為OR左邊的a++已經是true,無論右邊的結果是什麼,最後都是得到true,所以吉里吉里不會執行b++的部分,以下是運算的步驟。

c=a++ || b++
c=1 || b++    //已經確定是true
c=1    //a的值最後增加1

(k ゚∀゚)<由於表達式不一定整個都被執行,這有可能做成嚴重的錯誤,這主要原因是我們在表達式裡,把值指定給變數,雖然有些人喜歡利用這特性來簡化程式碼,但初學者應該盡量避免。

(k ゚∀゚)<今次先介紹到這裡,下次再見。

沒有留言:

發佈留言