Scala 基礎(3)—— 基礎型別和基礎操作
阿新 • • 發佈:2019-01-09
1. Scala 的一些基礎型別
Scala 提供了 8 種基礎型別,對應 Java 的 8 種基本資料型別。
其中包括:
整數型別:Byte, Short, Int, Long, Char
浮點型別:Float, Double
布林型別:Boolean
與 Java 不同,這 8 種資料在 Scala 中都可以當做物件使用。例如, Int 型別定義在 scala.Int 中。
這 8 種類型在0 Scala 編譯時,都會轉為 Java 中對應的基本型別,所以基本不會有額外的開銷。
加上常用的字串型別 String (直接使用 java.lang.String),構成了在 Scala 中最常用的基礎型別。
2. 字面量
字面量是在程式碼中可以直接寫入常量的一種方式。包括:
2.1 整數字面量
- Int, Long, Short, Byte 四種類型
- 有十進位制和十六進位制 2 種形式
- 以 0X 或 0x 開頭,代表十六進位制的數,以 0-9a-fA-f 組成
2.2 浮點數字面量
- Double 或 Float 型別
- 以 F 或 f 結尾就是 Float 型別,反之是 Double 型別
- 由十進位制數字,小數點(可選),E 或 e(可選,代表指數)組成
2.3 字元字面量
- Char 型別
- 由一對單引號,中間任意 Unicode 字元組成
- 中間的可以是原字元,也可以是 Unicode 碼
- 用反斜槓 \ 轉譯特殊字元,包括:
- 換行符 \n
- 退格符 \b
- 製表符 \t
- 換頁符 \f
- 回車符 \r
- 雙引號 \"
- 單引號 \'
- 反斜槓 \\
- 可以使用 Unicode 字元定義變數,當然不推薦這麼做
val B\u0041\u0044 = 1 // 等價於 val BAD = 1
2.4 字串字面量
- String 型別
- 由一對雙引號,中間的字元 Unicode 組成
- 需要轉譯的字元,規則如字元字面量
- 可以使用一對 """,中間使用原生字串(即包括所有字串,換行,需要轉譯的任何字元)
val str = """Welcome Type "Help"."""
2.5 符號字面量
- scala.Symbol 型別
- 寫法是 'ident,ident 可以是任何字母和數字組成的識別符號
- 通常用在動態型別語言中用來當作識別符號的場合
- 符號字面量會被內部化,即相同的符號,兩次引用指向同一個 Symbol 物件(類似 Java Integer 物件對於 -128-127 的處理)
2.6 布林值字面量
- Boolean 型別
- false, true
2.7 函式字面量
- 之後細講
3. 字串插值
Scala 提供一種靈活的機制,字串插值,支援在字串中嵌入表示式。
3.1 s 插值器
- s 插值器對內嵌的每個表示式求值,對求值呼叫 toString 的方法。
- 用 $ 符號開始一個表示式
- 對於單變數,直接在 $ 後面給出變數名,讀到之後第一個非識別符號為止
- 對於包含非識別符號的字元,用 {} 括起來
val name = "Gerrard" val str1 = s"Hello, $name!" val str2 = s"The answer is ${2 * 3}"
3.2 raw 插值器
- 不識別轉譯字元
- 其餘功能同 s 插值器
val str1 = raw"\\\\" // 列印結果是四個\
3.3 f 插值器
- 支援 printf 風格的指令(似乎是 C語言的風格?)
- 指令放在表示式之後,以 % 開始
val str1 = f"${math.Pi}%.5f" // 輸出結果 3.14159
4. 操作符
Scala 中定義了一系列的操作符(與 Java 類似,不細講):
- 算數操作符:加(+) 減(-) 乘(*) 除(/) 取餘(%)
- 關係操作符:大於(>) 小於(<) 大於等於(>=) 小於等於(<=) 一元取反(!)
- 邏輯運算子:邏輯與(& 和 &&) 邏輯或(| 和 ||)
- 位運算子:按位與(&) 按位或(|) 按位異或(^) 一元的位反碼(~) 左移(<<) 右移(>>) 無符號右移(>>>)
5. 操作符即方法
在 Scala 中,任何操作符都是方法,例如:
val sum = 1 + 2
其本質只是在 Int 型別中定義了一個名為 + 的方法,這個方法接收一個 Int 型的引數
它等價於
val sum = 1.+(2)
反之,任何操作符也可以當做方法使用
val s = "Hello World!" s.indexOf("o") s indexOf "o"
上面兩個呼叫是等價的
當 s.indexOf("o"),indexOf 就是方法
當 s indexOf "o",indexOf 就是操作符