Sway 參考手冊/優先順序和結合性
優先順序(部分)描述了在包含不同運算子的表示式中,運算子的求值順序。在 Sway 中,表示式
3 + 4 < 10 - 2
求值為真。特別是,3 + 4和10 - 2在<之前求值,得到7 < 8,這確實是真值。這意味著+和-的優先順序高於<。如果<的優先順序更高,那麼4 < 10將首先求值,得到3 + true - 2,這是沒有意義的。
請注意,優先順序只是一個偏序關係。例如,我們無法確定3 + 4是否在10 - 2之前求值,反之亦然。仔細檢查後,我們發現只要這兩個運算都在涉及<的表示式求值之前執行,那麼執行順序並不重要。通常假設左運算元在右運算元之前求值。對於邏輯連線符,這確實是正確的。但是對於其他運算子,這樣的假設可能會導致問題。你將在後面瞭解原因。現在,請記住永遠、永遠、永遠不要依賴運算元求值的順序!
Sway 中優先順序最低的運算子是賦值運算子,稍後將進行描述。接下來是布林連線符 && 和 ||。下一級是布林比較運算子 <、<=、>、>=、== 和 !=。之後是算術運算子 +、-、*、/ 和 %。最後,優先順序最高的是選擇運算子或點運算子(點運算子是一個句號或句點)。高優先順序的運算在低優先順序的運算之前執行。以運算子語法呼叫的函式具有與數學運算子相同的優先順序。
與你在小學學習的代數優先順序不同,在 Sway 中,乘法和除法的優先順序與加法和減法相同。因此,在這些運算子的組合中,左側的運算在右側的運算之前執行。要強制乘法和除法在加法和減法之前執行,必須使用括號。例如
sway> 5 + 2 * 3 //5 plus 2 is 7, 7 times 3 is 21 INTEGER: 21
但是
sway> 5 + (2 * 3) //2 * 3 is 6, 5 + 6 is 11 INTEGER: 11
結合性描述瞭如何對由相同優先順序運算子連線的多個表示式進行求值。除賦值運算子外,所有運算子都是左結合的。例如,表示式 5 - 4 - 3 - 2 - 1 等價於 ((((5 - 4) - 3) - 2) - 1)。對於左結合結構,等價的、完全帶括號的結構在左側堆積了開括號。如果減法運算子是右結合的,則等價的表示式將是 (5 - (4 - (3 - (2 - 1)))),其中閉括號在右側堆積。對於交換運算子,它是左結合還是右結合並不重要。但是,減法不是交換的,因此結合性很重要。對於給定的表示式,左結合求值為 -5。如果減法是右結合的,則求值為 3。唯一右結合的運算子是賦值運算子。你將在賦值章節中看到原因。