Swift優先級和結合性
優先級和結合性
運算符的優先級使得一些運算符優先於其他運算符,高優先級的運算符會先被計算。
結合性定義相同優先級的運算符在一起時是怎麼組合或關聯的,是和左邊的一組呢,還是和右邊的一組。意思就是,到底是和左邊的表達式結合呢,還是和右邊的表達式結合?
在混合表達式中,運算符的優先級和結合性是非常重要的。舉個例子,為什麼下列表達式的結果為4
?
2 + 3 * 4 % 5
// 結果是 4
如果嚴格地從左計算到右,計算過程會是這樣:
- 2 + 3 = 5
- 5 * 4 = 20
- 20 / 5 = 4 餘 0
但是正確答案是4
而不是0
。優先級高的運算符要先計算,在Swift和C語言中,都是先乘除後加減的。所以,執行完乘法和求餘運算才能執行加減運算。
乘法和求餘擁有相同的優先級,在運算過程中,我們還需要結合性,乘法和求餘運算都是左結合的。這相當於在表達式中有隱藏的括號讓運算從左開始。
2 + ((3 * 4) % 5)
3 * 4 = 12,所以這相當於:
2 + (12 % 5)
12 % 5 = 2,所這又相當於
2 + 2
計算結果為 4。
查閱Swift運算符的優先級和結合性的完整列表,請看表達式。
注意:
Swift的運算符較C語言和Objective-C來得更簡單和保守,這意味著跟基於C的語言可能不一樣。所以,在移植已有代碼到Swift時,注意去確保代碼按你想的那樣去執行。