本篇教程屬於 Swift 系列教程之一

想像一下這個運算式:

let amount = 1 + 2 * 3

根據 1 + 22 * 3 的計算順序的不同,amount 的值可能會截然不同。

計算順序是由運算子的先行順序決定的。根據先行順序,最常見的運算子排序如下:

  • 乘法 (*)、除法 (/)、餘數 (%)
  • 加法 (+)、減法 (-)
  • 比較 (==, !=, <, >, <=, >=)
  • 邏輯與 (&&) 和 邏輯或 (||)
  • 三元條件 (?:)
  • 賦值運算符和複合賦值運算符 (=, += 等等)

這意味著上述運算式首先計算乘法,然後再計算加法:

let amount = 1 + 2 * 3 // = 7

完整的先行順序表格可以在 https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations 找到。

如果在一個表達式中有多個具有相同先行順序的運算子,我們使用運算子的結合性來確定哪個運算子擁有優先權。

例如,考慮下面的例子:

let amount = 4 / 2 * 5

根據我們是先執行 4 / 2 還是 2 * 5,結果可能是 100.4

結合性解決了這個問題。乘法是左結合的,所以我們必須先執行左邊的表達式。使用括號可以讓我們明白這一點:

let amount = (4 / 2) * 5

乘法 (*)、除法 (/)、餘數 (%)、加法 (+)、減法 (-)、邏輯與 (&&)、邏輯或 (||) 是 左結合的

賦值運算符和複合賦值運算符 (=, += 等等) 和 三元條件 (?:) 是 右結合的

比較 (==, !=, <, >, <=, >=) 沒有結合性。