程式扎記: [Scala 小學堂] Scala Gossic : 起步走 - 資料、變數、操作 (資料型態)

標籤

2016年4月8日 星期五

[Scala 小學堂] Scala Gossic : 起步走 - 資料、變數、操作 (資料型態)

轉載自 這裡 
前言 : Scala 是一個可直譯、可編譯、靜態、可運行於 JVM 之上、可與 Java 互操作、融合物件導向編程特性與函式編程風格的程式語言. 從一些簡單的語法開始,了解 Scala 的許多特性,所以就算是起步走,東西也夠多了. 簡單的小程式可以使用 scala 指令,編譯的事就交給 scalac,編譯想快點就用 fsc. (Scala 官網), 所有的東西都是物件,所有的操作都是方法. 

資料型態 : 
在 Scala 中,一切都是物件,即使是一個整數也是物件 : 
scala> 1
res0: Int = 1

scala> "Hello"
res1: java.lang.String = Hello


Int 實際上是 scala 套件(package)中的類別,Scala 會自動 import 該套件下的類 別,Byte、Short、Int、Long、Char、Float、Double、Boolean 等都位於 scala 套件中,在 JVM 上運行時,它們對 應於 Java 中的byte、short、int、long、char、float、double、boolean 等基本型態(Primitive type),有著與 Java 中基本資料型態相同的範圍. 

Scala 也重用一些Java中的類別,例如字串,在上面的示範中可以看到,Scala 直接重用了 java.lang.String 類別(Scala 也會自動 import 套件java.lang).如果你在程式中直接寫一個整數,則預設是十進位的 Int 整數,你可以用 0 開頭表示這是個八進位整數,用 0x 開頭表示這是個十六進位整數,以 L 或l結尾時,表示這會是個 Long 整數 : 
scala> 010
res2: Int = 8

scala> 0xA
res3: Int = 10

scala> 123L
res4: Long = 123


如果你直接撰寫一個浮點數,則預設會是個 Double,加上 F 或 f 可以指定其為 Float,你也可以使用 科學記數 來表示浮點數 : 
scala> 3.14
res5: Double = 3.14

scala> 3.14F
res6: Float = 3.14

scala> 3.14e10
res7: Double = 3.14E10

scala> 3.14e2
res8: Double = 314.0


字元是以單引號包裹住,也可以指定 Unicode 編碼 : 
scala> 'A'
res9: Char = A 
scala> '\u0041'
res10: Char = A


以 \ 作開頭為跳脫字元,如以上指定Unicode編碼是其中一例,你還可以有以下的字元指定方式 : 
 

在 Scala 中,若要取得整數、浮點數等的數值範圍,則可以參考下面範例(在 Java 中則是定義在各自的包裹物件上,如 Integer、Double 等),例如 : 


在 Scala 中,如整數、浮點數等基本的型態,可以直接作一些操作,例如: 
scala> -13 abs // -13.abs
res0: Int = 13

scala> 1 max 2 // 1.max(2)
res1: Int = 2

scala> 3.14 round // 3.14.round
res2: Long = 3


事實上,absmaxround 等都是物件上的方法(在 Scala 中, 方法如果不帶引數或只帶一個引數,則括號可以省略),但並非 IntDouble 上的方法,在 Scala 中,如果發現某個方法不屬於某物件,則會嘗試看看 是否有定義的隱式轉換(Implicit conversion),在這邊的例子中,由於 Scala 為這些基本的資料型態定義了一些富包裹器(Rich Wrapper),當必要時,會嘗試將數值以富包裹器包裹,看看是否可以執行所指定的方法,例如 absmax 其實是 scala.runtime.RichInt 上的方法,round 其實是scala.runtime.RichDouble 上的方法 : 

下表列出了基本型態與富包裹器的對應 : 


補充說明 : 
Tutorialspoint - Scala Data Types

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!