2012年2月5日星期日

TJS教學---increment, decrement and assignment operator,遞增、遞減、指定運算子

為何這次教那麼多運算子,連標題都長得要命。>( ゚ω゚ s)

(k ゚∀゚)<因為這次教的運算子的功能都是差不多,都是把原本變數的值做一些運算。

(k ゚∀゚)<之前我曾經介紹過指定運算子,把數值指定給變數,有時我們亦會把原本變數的值先進行運算才指定給變數。

是不是好像以下的例子。>( ゚ω゚ s)

var a=6;
a=a+5;

(k ゚∀゚)<是的,我們經常要把原本變數的數值加或減以某個數值,就有如上述的例子,我們把a的數值加以5,再將結果指定給a。

(k ゚∀゚)<由於這是很常見的運算,所以一般的程式語言都提供比較簡潔的寫法,當然包括吉里吉里,用一個指定運算子來完成這兩個運算。以下的範例的效果跟上一個是一樣的。

var a=6;
a+=5;

(k ゚∀゚)<除了這個之外,吉里吉里還有其他類似的指定運算子,以下是一些例子。

運算子例子效果
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba + a / b
\=a \= ba = a \ b
%=a %= ba = a % b
&&=a &&= ba = a && b
||=a ||= ba = 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的值由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);










(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);










(k ゚∀゚)<在上述的範例裡,由於遞增運算子是寫在變數前面(++a),所以吉里吉里先把a的數值加1,即是a的數值變成7,才把a的數值這指定給b,因此a和b的數值都是7。

(k ゚∀゚)<雖然這些運算子可以使運算的程式碼比較簡潔,不過過分地使用可能會降低可讀性,變得本末倒置,令別人和自己都看不懂自己到底想做什麼運算,所以最重要的還是容易看懂,有時候寫得詳細一些反而會比較好。

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

沒有留言:

發佈留言