Swift 入門指南 V1.00 - 單元 4 - 運算式與陳述




運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成



上圖為運算式常見的形式,多數運算子都需要兩個運算元,另有一個需要三個運算元的運算子。


單一運算元就構成一個運算式,運算元可以是變數 (variable) 、字面常數 (literal) 或呼叫函數 (function) ,例如


// 以變數當運算元
a
// 以字面常數當運算元
3
// 呼叫 println() 當運算元
println()

運算式,顧名思義,其為運算出一個結果的式子,因此單一運算元的運算式所得到的結果就是運算元的值,如果是方法呼叫,就是方法的回傳值 (return value) 囉!


單一運算元也可以結合單元運算子,單元運算子有


運算子功能範例
++a
--a
++遞增++a, a++
--遞減--a, a--
!邏輯補數運算子!a

正負如一般數學表示正負值一樣,同樣的,負負會得正


var a = -3
var b = +a // b 會等於 -3
var c = -a // c 會等於 3

遞增、遞減則是會將整數變數遞增 1 或遞減 1 ,有前後之別


var a = 3
var b = ++a // b 會等於 4
var c = a++ // c 會等於 4
var d = --a // b 會等於 4
var e = a-- // e 會等於 4

邏輯補數運算子會把 true 變成 falsefalse 變成 true


var a = true
var b = !a // b 會等於 false
var c = !b // c 會等於 true

一般運算子都須結合兩個運算元,例如算術運算子 (arithmetic operator) ,可用在整數 (integer) 及浮點數 (floating-point number) ,計算結果也為整數或浮點數


運算子功能範例
+a + b
-a - b
*a * b
/a / b
%取餘數a % b

例如


var a = 11
var b = a + 2 // b 會等於 13
var c = b - 2 // c 會等於 11
var d = c * 2 // d 會等於 22
var e = d / 2 // e 會等於 11
var f = e % 2 // f 會等於 1

相等性及關係運算子 (equality and relational operator) ,可用於整數及浮點數或布林值 (Boolean value) ,計算結果不是 true 就是 false


運算子功能範例
==相等a == b
!=不相等a != b
>大於a > b
>=大於等於a >= b
<小於a < b
<=小於等於a <= b

例如


var a = 11
var b = 22
  
var c = a >= b // c 會等於 false
var d = a <= b // d 會等於 true
var e = c == d // e 會等於 false
var f = a != b // f 會等於 true

我們運用的等號,其實屬於指派運算子 (assignment operator) ,所謂的指派是把等號右邊的東西給左邊的變數。指派運算子也可以跟算術運算子合用,例如


運算子功能範例
=指派a = b
+=相加同時指派a += b
-=相減同時指派a -= b
*=相乘同時指派a *= b
/=相除同時指派a /= b
%=取餘數同時指派a %= b

例如


var a = 12
a += 3 // a 會等於 15
a -= 3 // a 會等於 12
a *= 3 // a 會等於 36
a /= 3 // a 會等於 12
a %= 3 // a 會等於 0

有沒有看的眼花撩亂?居然有 f = a != b 之類的式子出來,這是因為運算子有計算的優先次序 (precedence) ,由於 != 的優先順序在 = 之前,所以 a != b 會先被計算,結果才會指派到 f 之中。如果不是很清楚各個運算子的優先次序,保險一點的做法可以用小括弧,把要先計算的運算式用小括弧圍起來,例如


f = (a != b) //等於 f = a != b

這是因為小括弧有最高的優先計算次序。


以上程式碼逐一在 Playground 輸入,結果如下



以上介紹的是基本運算子 (basic operator) , Swift 中還有一些運算子如範圍運算子 (range operator) 及進階運算子 (advanced operator) 等,我們在稍後的單元才會介紹。

每一行的運算式就是程式 (program) 中獨立的陳述 (statement) ,陳述為程式的執行單位,如果要在同一行中放進兩個陳述,就需要用分號區隔,例如


a = 22; b = 11

至於控制結構 (control structure) 是屬於多行的複合陳述 (compound statement) ,我們先來看看控制結構中的選擇吧!


中英文術語對照


運算式expression
運算元operand
運算子operator
變數variable
字面常數literal
函數function
回傳值return value
算術運算子arithmetic operator
整數integer
浮點數floating-point number
相等性及關係運算子equality and relational operator
整數及浮點數或布林值Boolean value
指派運算子assignment operator
優先次序precedence
程式program
陳述statement
控制結構control structure
複合陳述compound statement

1 則留言:

Unknown 提到...

遞增、遞減則是會將整數變數遞增 1 或遞減 1 ,有前後之別

var a = 3
var b = ++a // b 會等於 4
var c = a++ // c 會等於 4
var d = --a // b 會等於 4
var e = a-- // e 會等於 4
================================
var d 那行的註解打錯了吧@@