2012年1月31日星期二

TJS教學---logical operator,邏輯運算子

我已經了解什麼是比較運算子,不過如果我想要同時進行兩個以上的比較,該怎麼辦?>( ゚ω゚ s)

(k ゚∀゚)<我們的確會經常遇到這種情況,例如,我想檢查變數a的數值是否在0至100之間,即是要同時符合a<=100和a>=0這兩項條件。

(k ゚∀゚)<數理邏輯裡有AND(且)、OR(或)、NOT(非)等運算,而TJS亦提供了一些叫邏輯運算子(Logical operator)的運算子,包括&&(AND)、||(OR)、!(NOT)這三種運算子。

(k ゚∀゚)<首先介紹一下&&這個運算子,&&代表AND,必須兩者都是true,才能得到true,如果任何一個是false,最後都會得到false。

(k ゚∀゚)<以下是一些例子。

aba&&b
000
非零值00
0非零值0
非零值非零值1

非零值是什麼意思?>( ゚ω゚ s)

(k ゚∀゚)<非零值即是任何零以外的數值,例如1、-1、2.1等,在條件式裡,吉里吉里會把這些數值當成true,而0則會當成false。

難怪說2&&3之類那麼奇怪的運算也可以接受?>( ゚ω゚ s)

(k ゚∀゚)<是的,不過運算後傳回的值往往會用1來代表true,例如2&&3會傳回1來代表true。

(k ゚∀゚)<之後我們介紹一下||;這個運算子,||代表OR,只要任何一個的值是true,就會得到true,唯有兩者都是false,才能得到false。

(k ゚∀゚)<以下是一些例子。

aba||b
000
非零值01
0非零值1
非零值非零值1

(k ゚∀゚)<最後介紹的是!,!代表NOT,使用後的值變成相反的,true變成false,false變成true。

(k ゚∀゚)<以下是一些例子。

a!a
01
非零值0

那麼這些邏輯運算子的優先順序是怎麼樣,如果我寫成以下的模樣,到底哪個會優先?>( ゚ω゚ s)

var a=!0 || 0 && 0;
System.inform(a);

(k ゚∀゚)< ! 這個運算子的優先順序其實十分高,甚至比加減乘除等算術運算子還要高,所以在上述的例子裡,會優先做了 ! 這個運算子,至於&&和||相比,&&僅勝於||,所以以下是吉里吉里執行時的順序。

a=!0 || 0 && 0
a=1 || 0 && 0
a=1 || 0
a=1

唔……它們的優先順序好像有點難記起來>( ゚ω゚ s)

(k ゚∀゚)<的確是的,所以為了確保優先順序,建議使用括號來區分它們的順序,這樣亦令自己更容易理解順序。

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

沒有留言:

發佈留言