Sway 參考手冊/組合基本型別
就像基本型別本身一樣,基本型別的組合也是表示式。例如,假設你忘記了你的乘法表,不確定 8 乘以 7 是 54 還是 56。我們可以問 Sway,向直譯器呈現表示式
sway> 8 * 7; INTEGER: 56
和以前一樣,分號表示表示式的結束。乘號 * 被稱為運算子,因為它操作 8 和 7,產生一個等價的基本型別值。8 和 7 被稱為運算元。似乎各種運算元的實際名稱不再被教授了,所以為了懷舊,這裡有它們。乘號左側的運算元(在本例中為 8)被稱為被乘數。右側的運算元(在本例中為 7)被稱為乘數。結果被稱為積。
其他基本運算子的運算元也有特殊的名稱。對於加法,左側運算元被稱為被加數,右側運算元被稱為加數。結果被稱為和。對於減法,左側運算元是被減數,右側是減數,結果是差。最後,對於除法(我認為這仍然是教授的),左側運算元是被除數,右側運算元是除數,結果是商。
一般來說,運算子與其運算元之間用空格、製表符或換行符隔開,統稱為空白[1]。
輸入表示式 8*7; 將是一個錯誤,因為乘法運算子沒有必要的空白。
事實上,Sway 總是接收一個表示式,並顯示一個等價的基本表示式(例如,整數或實數)。所有 Sway 運算子都是二元的,意味著它們恰好對兩個運算元進行運算。我們首先看一下數值運算子。
如果將兩個事物加在一起有意義,你可能可以使用 + 運算子在 Sway 中執行此操作。例如
sway> 2 + 3; INTEGER: 5 sway> 1.9 + 3.1; REAL: 5.00000000000 sway> "hello" + "world" STRING: helloworld
可以看出,如果將兩個整數加在一起,結果是一個整數。如果對兩個實數做同樣的事情,結果是一個實數。對字串加字串也是如此。當新增不同型別的物件時,事情變得更加有趣。將整數和實數(按任何順序)加在一起,總是產生一個實數。
sway> 2 + 3.3; REAL: 5.30000000000 sway> 3.3 + 2; REAL: 5.30000000000
將整數和字串(被加數為整數)加在一起,產生一個整數。加數字符串,如果可能的話,被解釋為整數
sway> 2 + "3"; INTEGER: 5 sway> 2 + "3.3"; INTEGER: 5 sway> 2 + "hello"; INTEGER: 2
將整數和字串(被加數為字串)加在一起,產生一個整數。加數整數被解釋為字串
sway> "hello" + 2; INTEGER: "hello2" sway> "3" + 2; STRING: "32"
數字的減法、乘法和除法遵循與加法相同的規則。但是,這些運算子,按照定義,不適用於字串[2]。
特別要注意的是,除法運算子對於整數運算元而言。考慮計算以下表達式
14 / 2
如果要求 Sway 直譯器執行此任務,結果將如預期的那樣為 7。但是,如果要求直譯器計算表示式...
14 / 5
結果將是 2,而不是 2.8。根據上面的規則,整數除法總是返回一個整數,如果有小數部分,則會丟棄。請注意,以下所有六個表示式都計算為 2.8
14 / 5.0 14.0 / 5 14.0 / 5.0 14 / real(5) real(14) / 5 real(14) / real(5)
最後三個說明了轉換函式的使用。在上面的情況下,整數在除法發生之前被轉換為實數。
整數除法的補充是模運算子 %。雖然整數除法的結果是商,但模運算子的結果是餘數。因此
14 % 5
計算結果為 4,因為 5 除以 14 剩下 4。為了檢查這是否屬實,可以要求直譯器計算
14 / 5 * 5 + (14 % 5) == 14
這個複雜的表示式提出了問題“商乘以除數加上餘數是否等於原始被除數?”。Sway 直譯器將回答,確實如此。使用圓括號的原因是 Sway 算術運算子之間缺乏優先順序,將在下一章中詳細解釋。
計算機程式中的空白(製表符、換行符和空格)有兩個目的。首先是使語言中的表示式賞心悅目。第二,空白通常表示一個基本型別的結束。與許多程式語言不同,Sway 使用空白來表示運算子的結束。因此,8 * 7 被解釋為由 * 運算子隔開的兩個數字,而 8*7(沒有空格)將被認為是“錯誤的數字”。我們將在稍後瞭解變數。
還記得布林基本型別 :true 和 :false 嗎?我們可以使用布林比較運算子生成這樣的值。例如,我們可以詢問 3 是否小於 4
sway> 3 < 4; SYMBOL: :true
直譯器的響應表明,確實,3 小於 4。如果不是,直譯器將響應 :false。除了 <(小於)之外,還有其他布林比較運算子:<=(小於或等於)、>(大於)、>=(大於或等於)、==(等於)和 !=(不等於)。
除了整數之外,我們還可以使用小於或大於之類的運算子比較實數與實數,比較字串與字串。一般來說,比較整數或實數與字串是非法的。
任何 Sway 型別都可以使用 == 和 != 比較運算子與任何其他型別進行比較。如果使用這些運算子比較整數與實數,則在進行比較之前,整數將被轉換為實數。在其他情況下,使用 == 比較不同型別將產生 :false 值。相反,使用 != 比較不同型別將產生 :true(上述例外是整數與實數的比較)。如果型別匹配,則 == 僅當值也匹配時才產生 true。運算子 != 也會相應地執行。
我們可以使用布林邏輯連線詞 &&(和)和 ||(或)組合比較。
sway> 3 < 4 && 4 < 5; SYMBOL: :true sway> 3 < 4 || 4 < 5; SYMBOL: :true sway> 3 < 4 && 5 < 4; SYMBOL: :false sway> 3 < 4 || 5 < 4; SYMBOL: :true
第一個互動詢問表示式3 < 4和表示式4 < 5是否都為真。由於兩者都為真,直譯器響應 :true。第二個互動詢問至少一個表示式是否為真。同樣,直譯器響應 :true。&& 和 || 之間的區別在最後兩個互動中得到說明。由於只有一個表示式為真(後一個表示式為假),因此只有 || 運算子產生真值。
還有一個布林邏輯運算,稱為非。它只是反轉附加到它的表示式的值。非運算子只能作為函式呼叫(因為它不是二元運算子)。由於你還不瞭解函式,我會向你展示它的外觀,但不會解釋它的操作。
sway> not(3 < 4 && 4 < 5); SYMBOL: :false sway> not(3 < 4 || 4 < 5); SYMBOL: :false sway> not(3 < 4 && 5 < 4); SYMBOL: :true sway> not(3 < 4 || 5 < 4); SYMBOL: :false
請注意,我們已經將非附加到之前涉及邏輯連線詞的每個表示式。另請注意,直譯器的響應在每種情況下都與之前相反。
- ↑ 計算機科學家在寫年度報告時,經常將他們所做和正在報告的事物稱為暗空間。擁有大量的暗空間總是好的!
- ↑ 這並不意味著你永遠不能減去字串。稍後你將學習如何覆蓋 Sway 的減號運算子,這樣你就可以隨心所欲地減去奇怪的東西。