昨天,我們學會了處理「可能不存在」的資料,讓程式在對話時不再輕易出錯。今天,我們要為這門「程式語言」增添更多的邏輯概念!
我們要學習的就是 運算子(Operators)。它們是程式世界中的運算符號 (+
, *
)、比較詞 (>
, ==
) 與連接詞 (&&
, ||
),賦予我們組合與判斷的能力。學會它們,你就能從簡單的對話,進階到能清晰表達複雜的程式邏輯。
+
, -
, *
, /
) 與賦值 (=
, +=
)。==
, >
) 與邏輯 (&&
, ||
),建立判斷依據。...
)、三元 (?:
) 與空值聚合 (??
) 等高效率語法。()
) 如何決定計算的先後順序。Swift 使用 =
來將某個值「指派」給變數或常數:
let b = 10
var a = 5
a = b
// a 等於 10
也可以一次指派多個值:
let (x, y) = (1, 2)
// x 為 1, y 為 2
Swift 支援基本的四則運算:
var c = 1 + 2 // c 等於 3
var d = 7 - 2 // d 等於 5
var e = 3 * 2 // e 等於 6
var f = 10.0 / 2.5 // f 等於 4.0
加法 +
也能用來串接字串:
let str1 = "Hello, "
let str2 = "Swift"
let str3 = str1 + str2
print(str3) // 印出:Hello, Swift
餘數是「除不盡的部分」,也稱為取模(mod)運算:
var oneNumber = 9 % 4
print(oneNumber) // 餘數為 1,因為 9 = 4 * 2 + 1
你可以用 -
切換正負號,或用 +
保持原值:
let number1 = 3
var negative = -number1 // -3
var backToPositive = -negative // 3
let number2 = -6
var unchanged = +number2 // -6
+
號存在的意義是什麼?看到這裡你可能想問:如果 +number2
和 number2
結果一樣,為什麼 +
還要存在?
-
形成對稱,讓語言的語法更完整。+
能讓排版更整齊,正負關係一目了然,就像這樣:// 使用 + 號對齊後,正負關係非常清晰
let profit = +1000
let cost = -350
let tax = -150
let bonus = +200
在日常開發中,基本上不太需要使用一元正號 +
,但了解它存在的理由跟概念,有助於你閱讀他人的程式碼。
Swift 提供把數值運算與指派合併的簡潔寫法:
var n = 3
n += 2 // n = n + 2 = 5
n -= 1 // n = n - 1 = 4
n *= 2 // n = n * 2 = 8
n /= 4 // n = n / 4 = 2
n %= 2 // n = n % 2 = 0
比較運算子會傳回一個布林值(true
或 false
):
運算子 | 意義 |
---|---|
== | 等於 |
!= | 不等於 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
1 == 1 // true
2 != 1 // true
2 > 1 // true
1 < 2 // true
1 >= 1 // true
2 <= 1 // false
你也可以搭配 if
使用:
var i = 1
if i == 1 {
print("Yes, it is 1.")
} else {
print("No, it is not 1.")
}
當元組中的所有成員本身都支援比較時,Swift 也允許你直接比較整個元組。
它的比較方式非常直觀,就跟你查字典時比較單字的順序一模一樣,我們稱之為 字典序比較 (lexicographical comparison)。
規則如下:
==
的比較,則要求所有對應的元素都必須相等。我們來看一下範例,一步步拆解 Swift 的思考邏輯:
(1, "zebra") < (2, "apple") // true
Swift 只比較了第一個元素 1 和 2。因為
1 < 2
成立,比較立刻停止,直接回傳true
。它根本不會去看後面的"zebra"
和"apple"
。
(3, "apple") < (3, "bird") // true
Swift 比較第一個元素 3 和 3,發現它們相等,於是接著比較第二個元素。因為
"apple"
在字典順序中排在"bird"
前面("a" < "b")
,所以"apple" < "bird"
成立,最終回傳true
。
(4, "dog") == (4, "dog") // true
對於
==
比較,Swift 會檢查所有對應的元素是否都相等。因為4 == 4
而且"dog" == "dog"
,所以回傳true
。
有時候,我們的 if-else
邏輯非常簡單:如果條件成立,就賦予 A 值;如果不成立,就賦予 B 值。
未使用三元運算子之前,你可能會這樣寫:
let score = 85
var result: String
if score >= 60 {
result = "及格"
} else {
result = "不及格"
}
print(result) // 印出 "及格"
為了這種簡單情況,Swift 提供了一個更簡潔的語法——三元運算子,把上面 7 行的程式碼濃縮成 1 行!
使用三元運算子之後:
let score = 85
let result = score >= 60 ? "及格" : "不及格"
print(result) // 同樣印出 "及格"
它的語法結構是 條件 ? 值1 : 值2
,概念是:
score >= 60 這個條件是真的嗎?(?
)
如果是,就使用 值1
("及格");
否則(:
),就使用 值2
("不及格")。
透過這種方式,程式碼變得更精煉,可讀性也相當高。
空值聚合運算子會檢查左邊的值是否為 nil
,如果是,就返回右邊的預設值:
let defaultColor = "red"
var userColor: String? = nil
var colorToUse = userColor ?? defaultColor
print(colorToUse) // 印出 red
userColor = "green"
colorToUse = userColor ?? defaultColor
print(colorToUse) // 印出 green
Swift 提供三種區間寫法,常搭配 for-in
使用:
包含 a
和 b
:
for i in 1...3 {
print(i)
}
// 印出 1 2 3
包含 a
,但不包含 b
:
for i in 1..<4 {
print(i)
}
// 印出 1 2 3
只指定一邊的界限:
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names[2...] {
print(name) // Brian, Jack
}
for name in names[...1] {
print(name) // Anna, Alex
}
for name in names[..<2] {
print(name) // Anna, Alex
}
Swift 支援三種邏輯運算,搭配條件判斷使用:
!a
邏輯非a && b
邏輯且a || b
邏輯或let isOpen = false
if !isOpen { // !false 等於 true,所以條件成立
print("It is open.") // 印出 It is open.
}
let a = true
let b = false
if a && b { // true && false 等於 false,條件不成立
print("Success") // 這行不會執行
} else {
print("Failure") // 印出 Failure
}
let isSunday = true
let isWeekday = false
if isSunday || isWeekday { // true || false 等於 true,條件成立
print("Open") // 印出 Open
}
Swift 遵循運算子優先級規則。當運算式變複雜時,可以用括號來確保順序正確:
var number = 3 + 2 * 5 // 結果為 13
var another = (3 + 2) * 5 // 結果為 25
邏輯運算中也一樣:
let a = false
let b = true
let c = true
if a && b || c {
print("Success") // 成立,印出 Success
}
if a && (b || c) {
print("Failure") // 不成立,這行不會被執行
}
今天我們全面攻略了 Swift 的運算子!我們從最基礎的數值運算與指派 (=
, +=
) 開始,接著掌握了建立判斷式不可或缺的比較與邏輯運算 (==
, &&
)。我們更探索了區間 (...
)、三元 (?:
) 與空值聚合 (??
) 等能大幅簡化程式碼的 Swift 高效率語法。
熟練運用這些工具,並注意括號決定的運算順序,是寫出簡潔、清晰且強大程式碼的關鍵一步。
在程式世界裡,文字無所不在。我們雖然已經認識了 字串(String),但它的能耐遠不止於此!
明天,我們將深入探索 Swift 中字串的更多強大功能,包括如何處理多行文字、如何遍歷字串中的每一個字元,以及各種超實用的內建方法(例如檢查字首、計算長度等)。讓你對文字的操作功力更上一層樓!
敬請期待《Day 5|Swift 字串進階指南:多行文字、字元遍歷與實用方法!》