1. 程式人生 > >Scala 程式設計—第二節:資料型別及操作、流程控制

Scala 程式設計—第二節:資料型別及操作、流程控制

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的基本資料型別頭字母必須大寫

,下面我們以Int、Long、String、Char、Double及Float型別為例介紹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