Scala教學(二)常數、參數與型態介紹

今天要跟大家介紹 Scala 語法中,常數、參數的寫法與基本資料型態的介紹。

Quick Start

接下來將要分享我的Scala學習筆記,有任何建議與需要改進的地方,也請大家多多指教。

參考書籍Learning Scala

常數(Values)

常數的值是不可以被改變的。

語法如下:

val <identifier>[: <type>] = <data>

舉幾個例子:
範例1.

1
2
scala> val x:Int = 2
x: Int = 2

範例2.

1
2
scala> val str:String = "Hello world"
str: String = Hello world

如果說,我們嘗試去將常數的值重新定義會發生什麼事情呢?

1
2
3
scala> x=30
^
error: reassignment to val

會出現錯誤訊息,並且跟我們說,不能重新定義新值

另外,我們可以從語法去看出,常數的資料型態不一定需要寫。當沒有寫的時候,編譯器會幫我們自動指派一個符合的資料型態。
如:

1
2
scala> val y=10
y: Int = 10

編譯器幫我們指派了 y 這個參數的資料型態為 Int

參數(Variables)

在我們寫程式的過程中,參數是最常被我們運用到的。

語法如下:

var <identifier>[: <type>] = <data>

他與常數的差別就是在第一個關鍵字,參數是 var,常數則是 val
我們來看看下面例子:

1
2
3
4
5
6
7
8
scala> var a = 100
a: Int = 100

scala> a=99
mutated a

scala> a
res2: Int = 99

參數的值被更改了,但是如果我們今天將它改成字串會變成怎樣呢?

1
2
3
4
5
scala> a = "Hello world"
^
error: type mismatch;
found : String("Hello world")
required: Int

結果是不行的,一旦一開始的資料型態被確定,就沒辦法再改了。

資料型態(Type)

關於數字的資料型態

Name Description. Siz Min Max.
Byte Signed integer 1 byte -127 128
Short Signed integer 2 byte -32768 23767
Int Signed integer 4 byte -2^31 2^31 -1
Long Signed integer 8 byte -2^63 2^63 -1
Float Signed floating point 4 byte n/a n/a
Double Signed floating point 8 byte n/a n/a

我們來看一下例子:

1
2
3
4
5
6
7
8
scala> val b: Byte = 10
b: Byte = 10

scala> val s: Short = b
s: Short = 10

scala> val d: Double = s
d: Double = 10.0

如果是資料型態由小轉到大都沒問題,但是如果是大轉小呢?

1
2
3
4
5
6
7
8
scala> val l: Long = 20
l: Long = 20

scala> val i: Int = l
^
error: type mismatch;
found : Long
required: Int

結果是會出錯的,所以大家在使用這種不是強型態的語言做開發的時候,都需要特別小心。

字串(String)

Scala 語言中,字串需要用雙引號包起來。

如:

1
2
3
4
5
6
7
scala> val hello = "Hello World"
hello: String = Hello World

scala> val sign = "With Regards, \nYour friend"
sign: String =
With Regards,
Your friend

另外,這邊要特別提到,他不像 Java 需要使用 equals 進行比對,使用 == 就可以了。

如:

1
2
3
4
5
scala> val hello = "Hello World"
hello: String = Hello World

scala> val matched = (hello == "Hello World")
matched: Boolean = true

當我們需要處理字串的插值(Interpolation)時,我們是怎麼處理的呢?
當我們只是需要進行替換時,在雙引號面前加上 s

請參考:

1
2
3
4
5
6
7
8
scala> val me = "Greddy"
me: String = Greddy

scala> "Hi, I'm "+me+"."
res3: String = Hi, I'm Greddy.

scala> s"Hi, I'm ${me}."
res4: String = Hi, I'm Greddy.

如果需要進行format時,我們會在雙引號面前加上 f
如:

1
2
3
4
5
scala> val item = "apple"
item: String = apple

scala> f"I wrote a new $item%.3s today"
res5: String = I wrote a new app today

大家如果想要更了解format的寫法,可以參考 java.util.Formatter

Scala 型態 Overview

此圖片擷取參考書籍Learning Scala

Name Description. Instantiable
Any The root of all types in Scala No
AnyVal The root of all value types No
AnyRef The root of all reference (nonvalue) types No
Nothing The subclass of all types No
Null The subclass of all AnyRef types signifying a null value No
Char Unicode character Yes
Boolean true or false Yes
String A string of characters (i.e., text) Yes
Unit Denotes the lack of a value No

Tuples

Tuples 是一個可以裝多種資料型態的容器。

語法如下:

( <value 1>, <value 2>[, <value 3>…] )

範例如下:

1
2
scala> val info = (1, "Taiwan", true)
info: (Int, String, Boolean) = (1,Taiwan,true)

那我們要如何取值呢?

1
2
scala> val country = info._2
country: String = Taiwan

如果想要創造兩個值的 Tuples 可以使用 -> 這個符號,這是一個常見在 Tuples 中使用的 key-value 方法。

範例如下:

1
2
scala> val info = "age" -> 8
info: (String, Int) = (age,8)

這次就先到這邊喔!有問題歡迎寄信給我一起討論喔!~

謝謝您的支持與鼓勵

Ads