(k ゚∀゚)<因為這次教的運算子的功能都是差不多,都是把原本變數的值做一些運算。
(k ゚∀゚)<之前我曾經介紹過指定運算子,把數值指定給變數,有時我們亦會把原本變數的值先進行運算才指定給變數。
是不是好像以下的例子。>( ゚ω゚ s)
var a=6;
a=a+5;
a=a+5;
(k ゚∀゚)<是的,我們經常要把原本變數的數值加或減以某個數值,就有如上述的例子,我們把a的數值加以5,再將結果指定給a。
(k ゚∀゚)<由於這是很常見的運算,所以一般的程式語言都提供比較簡潔的寫法,當然包括吉里吉里,用一個指定運算子來完成這兩個運算。以下的範例的效果跟上一個是一樣的。
var a=6;
a+=5;
a+=5;
(k ゚∀゚)<除了這個之外,吉里吉里還有其他類似的指定運算子,以下是一些例子。
運算子 | 例子 | 效果 |
---|---|---|
+= | a += b | a = a + b |
-= | a -= b | a = a - b |
*= | a *= b | a = a * b |
/= | a /= b | a + a / b |
\= | a \= b | a = a \ b |
%= | a %= b | a = a % b |
&&= | a &&= b | a = a && b |
||= | a ||= b | a = a || b |
既然兩種的效果都是一樣,那麼我可不可以不去記得那些指定運算子?>( ゚ω゚ s)
(k ゚∀゚)<就算大家不打算用這些運算子,最好也應該懂得這些運算子的用法,由於比較簡潔,所以有些人喜歡使用它們,因此大家總有可能看到別人用這些運算子,
(k ゚∀゚)<不過說到最常見的運算,就莫過於把變數的數值加或減以1,因此一般的程式語言都有個叫做遞增運算子(Increment operator)和遞減運算子(Decrement operator)的運算子,當然包括吉里吉里,以下是範例。
var a=6,b=6;
a++; //跟a=a+1的效果一樣
b--; //跟b=b-1的效果一樣
System.inform("a="+a+"\nb="+b);
a++; //跟a=a+1的效果一樣
b--; //跟b=b-1的效果一樣
System.inform("a="+a+"\nb="+b);
那麼在上述的範例裡,a++是不是把a的值由6增加為7,而則b--把b的值由6減小為為5嗎?>( ゚ω゚ s)
(k ゚∀゚)<是的。
(k ゚∀゚)<然而,我們可以把遞增運算子或遞減運算子寫在變數前面或變數後面,不過兩者的運算結果是有差別的,若果是寫在變數前面,就會先將變數的數值加或減1,然後才用來做其他運算,相反地若果是寫在變數後面,就會先將變數原本的數值用來做其他運算,然後才把變數的數值加或減1。
什麼前面和後面,我還是不明白兩者的差別......>( ゚ω゚ s)
(k ゚∀゚)<那麼看看以下的例子。
var a=6;
var b=a++;
System.inform("a="+a+"\nb="+b);
var b=a++;
System.inform("a="+a+"\nb="+b);
(k ゚∀゚)<在上述的範例裡,變數a原本的數位是6,而在第二句的時候,由於遞增運算子是寫在變數後面(a++),所以吉里吉里先把a的數值6指定給b,之後a的數值才加1,因此b的數值是6,a的數值是7。
(k ゚∀゚)<我們再看看以下的例子。
var a=6;
var b=++a;
System.inform("a="+a+"\nb="+b);
var b=++a;
System.inform("a="+a+"\nb="+b);
(k ゚∀゚)<在上述的範例裡,由於遞增運算子是寫在變數前面(++a),所以吉里吉里先把a的數值加1,即是a的數值變成7,才把a的數值這指定給b,因此a和b的數值都是7。
(k ゚∀゚)<雖然這些運算子可以使運算的程式碼比較簡潔,不過過分地使用可能會降低可讀性,變得本末倒置,令別人和自己都看不懂自己到底想做什麼運算,所以最重要的還是容易看懂,有時候寫得詳細一些反而會比較好。
(k ゚∀゚)<今次介紹到這裡,下次再見。
沒有留言:
發佈留言