1. 程式人生 > >Scala 基礎(3)—— 基礎型別和基礎操作

Scala 基礎(3)—— 基礎型別和基礎操作

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 就是操作符