2011年12月31日星期六

KAG教學---也許只是為了寫少點字,變數(3)

(建議在閱讀本篇教學之前,請先閱讀KAG教學---如果,if條件判斷(1)KAG教學---加減乘除,變數(2))

今次你想介紹些什麼?>( ゚ω゚ s)

(k ゚∀゚)<今次介紹的運算子其實不太重要,只是令程式看起來比較簡潔,不過使用不當反而可能令程式更難以理解。

那麼為何要介紹這些運算子?>( ゚ω゚ s)

(k ゚∀゚)<因為大家總有可能看到別人用這些運算子,而且由於比較簡潔,所以有些人喜歡使用它們。

(k ゚∀゚)<之前我曾經介紹過指定運算子,把數值指定給變數,不過我們亦可以先進行運算才指定給變數。

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

[eval exp="tf.count=tf.count+2"]

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

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

[eval exp="tf.count+=2"]

(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

(k ゚∀゚)<不過說到最常見的運算,就莫過於把變數的數值加或減以1,因此一般的程式語言都有個叫做遞增運算子(Increment operator)和遞減運算子(Decrement operator)的運算子,當然包括吉里吉里,以下是範例。

[eval exp="tf.count++"]
[eval exp="tf.count--"]

(k ゚∀゚)<我們可以把遞增運算子或遞減運算子寫在變數前面或變數後面,不過兩者的運算結果是有差別的,若果是寫在變數前面,就會先將變數的數值加或減1,然後才用來做其他運算,相反地若果是寫在變數後面,就會先將變數原本的數值用來做其他運算,然後才把變數的數值加或減1。

我還是不明白兩者的差別......>( ゚ω゚ s)

(k ゚∀゚)<那麼看看以下的例子。

[eval exp="tf.b=6"]
[eval exp="tf.a=tf.b++"]
a=
[emb exp="tf.a"][r]
b=
[emb exp="tf.b"]

(k ゚∀゚)<在上述的範例裡,變數b原本的數位是6,而在第二句的時候,由於遞增運算子是寫在變數後面(tf.b++),所以吉里吉里先把tf.b的數值6指定給tf.a,之後tf.b的數值才加1,因此tf.a的數值是6,tf.b的數值是7。以下是這範例的結果。

















(k ゚∀゚)<我們再看看以下的例子。

[eval exp="tf.b=6"]
[eval exp="tf.a=++tf.b"]
a=
[emb exp="tf.a"][r]
b=
[emb exp="tf.b"]

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

















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

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

沒有留言:

發佈留言