為什麼要這樣做?>( ゚ω゚ 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 ゚∀゚)<今次先介紹到這裡,下次再見。
沒有留言:
發佈留言