Scala 程式設計—第二節:資料型別及操作、流程控制
阿新 • • 發佈:2019-02-04
1.Scala 資料型別
Scala 與 Java有著相同的資料型別,下表列出了 Scala 支援的資料型別
資料型別 | 描述 |
---|---|
Byte | 8位有符號補碼整數。數值區間為 -128 到 127 |
Short | 16位有符號補碼整數。數值區間為 -32768 到 32767 |
Int | 32位有符號補碼整數。數值區間為 -2147483648 到 2147483647 |
Long | 64位有符號補碼整數。數值區間為 -9223372036854775808 到 9223372036854775807 |
Float | 32 位, IEEE 754標準的單精度浮點數 |
Double | 32 位 IEEE 754標準的單精度浮點數 |
Char | 16位無符號Unicode字元, 區間值為 U+0000 到 U+FFFF |
String | 字元序列 |
Boolean | true或false |
Unit | 表示無值,和其他語言中void等同。用作不返回任何結果的方法的結果型別。Unit只有一個例項值,寫成()。 |
Null | null 或空引用 |
Nothing | Nothing型別在Scala的類層級的最低端;它是任何其他型別的子型別。 |
Any | Any是所有其他類的超類 |
AnyRef | AnyRef類是Scala裡所有引用類(reference class)的基類 |
Scala的基本資料型別與Java中的基本資料型別是一一對應的,不同的是Scala的基本資料型別頭字母必須大寫
- 整數型別
scala> val intNumber = 10
intNumber: Int = 10
- 浮點型別
// Double型別定義,直接輸入浮點數,編譯器會將其自動推斷為Double型別 scala> val doubleNumber = 3.1415 doubleNumber: Double = 3.1415 scala> val floatNumber = 3.14 floatNumber: Double = 3.14 // 要定義Float型別浮點數,需要在浮點數後面加F或f scala> val floatNumber = 3.14F floatNumber: Float = 3.14 scala> val floatNumber = 3.14f floatNumber: Float = 3.14
- 字元
// 字元定義,用''將字元包裹
scala> val charType = 'A'
charType: Char = A
常用特殊字元
特殊字元 | 描述 |
---|---|
\n | 換行符,其Unicode編碼為 (\u000A) |
\b | 回退符,其Unicode編碼為 (\u0008) |
\t | tab製表符 ,其Unicode編碼(\u0009) |
\” | 雙引號,其Unicode編碼為 (\u0022) |
\’ | 單引號,其Unicode編碼為 (\u0027) |
\ | 反斜杆,其Unicode編碼為(\u005C) |
- 字串
// 字串變數用""包裹
scala> val helloworld = "hello world"
helloworld: String = hello world
// 要定義"Hello World",可以加入轉義符\
scala> val helloworld = "\"Hello World\""
helloworld: String = "Hello World"
//如果希望能夠原樣輸出字串中的內容,則用三個引號"""將字串包裹起來
scala> println("""hello world \n hello scala""")
hello world \n hello scala
- 布林型別
scala> val flag = true
flag: Boolean = true
- 變數定義的兩種修飾符
scala中變數定義有兩種修飾符,一種val,一種是var,兩者區別是val修飾的變數不可變,var修改的變數可變,可再次賦值,以上面定義的helloworld為例
// val 修飾的變數不可再次賦值,否則會報錯 reassignment to val
scala> val hello = "hello"
hello: String = hello
scala> hello = "hello scala"
<console>:12: error: reassignment to val
hello = "hello scala"
^
scala> var hello = "hello"
hello: String = hello
scala> hello = "hello scala"
hello: String = hello scala
2.運算子
2.1 算術操作
運算子 | 描述 |
---|---|
+ | 加號 |
- | 減號 |
* | 乘號 |
/ | 除號 |
% | 取餘 |
例項:
// 整數求和,編譯器會將其轉換為(1).+(2)執行
scala> var sum = 1 + 2
sum: Int = 3
//前一語句等同於下列語句
scala> var sum = (1).+(2)
sum: Int = 3
//操作符過載,編譯器會將其轉換為(1).+(2L)執行
scala> var longSum = 1 + 2L
longSum: Long = 3
// 減法
scala> var jian = 1-5
jian: Int = -4
// 除法
scala> val chu = 1/5
chu: Int = 0
// 取模
scala> val mo = 1%5
mo: Int = 1
// 乘法
scala> val cheng = 1L * 5L
cheng: Long = 5
// scala中可以用+ -符號來表示正負數,例如-3 +3,並且可以加入到運算子當中
scala> val num = 1 + -5
num: Int = -4
2.2 關係運算
運算子 | 描述 |
---|---|
== | 等於 |
!= | 不等於 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
例項:
scala> 5 > 1
res1: Boolean = true
scala> 5 < 1
res2: Boolean = false
scala> 5 <= -1
res3: Boolean = false
scala> 5 <= 10
res4: Boolean = true
// "!" 表示求反
scala> !(5 <= -5)
res5: Boolean = true
scala> 5 != -5
res6: Boolean = true
scala> 5 == 5
res7: Boolean = true
2.3 邏輯運算
運算子 | 描述 |
---|---|
&& | 邏輯與 |
|| | 邏輯或 |
! | 邏輯非 |
例項:
scala> val a = true
a: Boolean = true
scala> val b = false
b: Boolean = false
scala> a && b
res8: Boolean = false
scala> a || b
res9: Boolean = true
scala> !(a || b)
res10: Boolean = false
scala> a && !b
res11: Boolean = true
##2.4 賦值運算子
運算子 | 描述 | 例項 |
---|---|---|
= | 簡單的賦值運算,指定右邊運算元賦值給左邊的運算元 | C = A + B 將 A + B 的運算結果賦值給 C |
+= | 相加後再賦值,將左右兩邊的運算元相加後再賦值給左邊的運算元 | C += A 相當於 C = C + A |
-= | 相減後再賦值,將左右兩邊的運算元相減後再賦值給左邊的運算元 | C -= A 相當於 C = C - A |
*= | 相乘後再賦值,將左右兩邊的運算元相乘後再賦值給左邊的運算元 | C *= A 相當於 C = C * A |
/= | 相除後再賦值,將左右兩邊的運算元相除後再賦值給左邊的運算元 | C /= A 相當於 C = C / A |
%= | 求餘後再賦值,將左右兩邊的運算元求餘後再賦值給左邊的運算元 | C %= A 相當於 C = C % A |
例項:
object Test {
def main(args: Array[String]): Unit = {
var a = 2;
var b = 5;
var c = 0;
c += b
println("c += b = " + c) // c += b = 5
c -= a
println("c -= a = " + c) // c -= a = 3
c *= 5
println("c *= 5 = " + c) // c *= 5 = 15
c /= b
println("c /= a = " + c) // c /= a = 3
c %= a
println("c %= a = " + c) // c %= a = 1
}
}
3. 流程控制
- if使用
scala> val num = if("hello"=="hello") 1 else 0
num: Int = 1
- while使用
scala> var a = 1
a: Int = 1
scala> while(a <= 10) {
| println("a = " + a)
| a += 1
| }
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
- do while 使用
scala> do{
| println("a = " + a)
| a += 1
| } while(a <= 10)
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
- for使用
// 1 to 10 表示1到10
scala> for(a <- 1 to 10){
| println("a = " + a)
| }
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
// 1 until 10 表示1到10但不包括10
scala> for(a <- 1 until 10){
| println("a = " + a)
| }
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
// 在 for 迴圈 中你可以使用分號 (;) 來設定多個區間,它將迭代給定區間所有的可能值
scala> for(a <- 1 to 3; b <- 1 to 3){
| println("a = " + a)
| println("b = " + b)
| }
a = 1
b = 1
a = 1
b = 2
a = 1
b = 3
a = 2
b = 1
a = 2
b = 2
a = 2
b = 3
a = 3
b = 1
a = 3
b = 2
a = 3
b = 3
// 可以將 for 迴圈的返回值作為一個變數儲存。語法格式如下:
var retVal = for{ var x <- List
if condition1; if condition2...
}yield x
// 大括號中用於儲存變數和條件,retVal 是變數,迴圈中的 yield 會把當前的元素記下來,儲存在集合中,迴圈結束後將返回該集合
例項:
scala> var a = 0
a: Int = 0
scala> val numList = List(1,2,3,4,5,6,7,8,9,10)
numList: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> var retVal = for{ a<- numList if a != 3; if a < 8 } yield a
retVal: List[Int] = List(1, 2, 4, 5, 6, 7)
scala> for(a <- retVal){
| println("a = " + a)
| }
a = 1
a = 2
a = 4
a = 5
a = 6
a = 7