今次你想介紹些什麼?>( ゚ω゚ 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 += 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 |
(k ゚∀゚)<不過說到最常見的運算,就莫過於把變數的數值加或減以1,因此一般的程式語言都有個叫做遞增運算子(Increment operator)和遞減運算子(Decrement operator)的運算子,當然包括吉里吉里,以下是範例。
[eval exp="tf.count++"]
[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"]
[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"]
[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 ゚∀゚)<今次介紹到這裡,下次再見。
沒有留言:
發佈留言