跳轉到內容

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

請注意,我們已經將附加到之前涉及邏輯連線詞的每個表示式。另請注意,直譯器的響應在每種情況下都與之前相反。

  1. 計算機科學家在寫年度報告時,經常將他們所做和正在報告的事物稱為暗空間。擁有大量的暗空間總是好的!
  2. 這並不意味著你永遠不能減去字串。稍後你將學習如何覆蓋 Sway 的減號運算子,這樣你就可以隨心所欲地減去奇怪的東西。


基本型別 · 優先順序和結合性

華夏公益教科書