Swift 運算子的先行順序和結合性
本篇教程屬於 Swift 系列教程之一
想像一下這個運算式:
1 | let amount = 1 + 2 * 3 |
根據 1 + 2
和 2 * 3
的計算順序的不同,amount
的值可能會截然不同。
計算順序是由運算子的先行順序決定的。根據先行順序,最常見的運算子排序如下:
- 乘法 (
*
)、除法 (/
)、餘數 (%
) - 加法 (
+
)、減法 (-
) - 比較 (
==
,!=
,<
,>
,<=
,>=
) - 邏輯與 (
&&
) 和 邏輯或 (||
) - 三元條件 (
?:
) - 賦值運算符和複合賦值運算符 (
=
,+=
等等)
這意味著上述運算式首先計算乘法,然後再計算加法:
1 | let amount = 1 + 2 * 3 // = 7 |
完整的先行順序表格可以在 https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations 找到。
如果在一個表達式中有多個具有相同先行順序的運算子,我們使用運算子的結合性來確定哪個運算子擁有優先權。
例如,考慮下面的例子:
1 | let amount = 4 / 2 * 5 |
根據我們是先執行 4 / 2
還是 2 * 5
,結果可能是 10
或 0.4
。
結合性解決了這個問題。乘法是左結合的,所以我們必須先執行左邊的表達式。使用括號可以讓我們明白這一點:
1 | let amount = (4 / 2) * 5 |
乘法 (*
)、除法 (/
)、餘數 (%
)、加法 (+
)、減法 (-
)、邏輯與 (&&
)、邏輯或 (||
) 是 左結合的
賦值運算符和複合賦值運算符 (=
, +=
等等) 和 三元條件 (?:
) 是 右結合的
比較 (==
, !=
, <
, >
, <=
, >=
) 沒有結合性。
tags: [“Swift”, “運算子”, “先行順序”, “結合性”]