1. 程式人生 > 實用技巧 >Scala(二)【基本使用】

Scala(二)【基本使用】

一.變數和資料型別

1.變數

語法:val / var 變數名:變數型別 = 值

val name:String = "zhangsan"

注意
1、val定義的變數想到於java的final,不可用被重新賦值
2、var定義的變數可以被重新賦值
3、在定義變數的時候,變數型別可以省略,scala會自動推斷
4、在定義變數的時候,必須初始化

2.命名規範

駝峰原則

3.字串操作

1、雙引號: val 變數名 = "字串"

val name:String = "zhangsan"

2、三引號: val 變數名 = """sql語句"""

一般用於寫Sql字串

val sparkSql : String =
  """
    |select
    |   t1.name,
    |   t2.age,
    |   t1.address
    |from test1 t1
    |join test2 t2
    |on t1.id = t2.id
    |""".stripMargin
print(sparkSql)

3、插值表示式: val 變數名 = s"hello ${變數名1}"

val name : String ="zhangsan"
val address:String = "BeiJing"
println(s"name=${name},address=${address}")

4、format方法: "hello %s".format(字串)

val name : String ="zhangsan"
val address:String = "BeiJing"
println("name is %s, address is %s".format(name, address))

4.資料型別

型別一覽圖

1、型別結構

Any: 所有型別的父類
	AnyVal:值型別
		Byte、Short、Int、Long、Float、Double、Char、Boolean
		Unit: 相當於java的void,有一個例項()
		StringOps: 是對java string的擴充套件
	AnyRef:引用型別
		String、scala class、scala集合、java class、java集合
			Null: 是所有引用型別的子類,有一個例項null
Nothing: 是所有型別的子類,一般scala丟擲異常的時候返回Nothing

2、資料轉換

1、數字之間的轉換
	1、精度小的自動轉成精度大的數字型別 比如Byte可以自動轉成Int
	2、精度大的數字轉成精度小的數字,通過toXXX方法轉換 比如 val a:Int = 10;  val b:Byte = a.toByte
2、數字和字串的轉換
	1、數字轉字串,可以通過插值表示式轉換
	2、字串轉數字,可以通過toXXX方法轉換

二.運算子

​ 1、算術運算子
​ 2、關係運算符
​ 3、邏輯運算子
​ 4、位運算子
​ 5、賦值運算子
​ scala中沒有++、--、三目運算子
​ scala中運算子是一個個的方法
​ scala中方法的呼叫:
​ 1、物件.方法名(引數,...)
​ 2、物件 方法名 (引數,...)
​ 如果方法的引數只有一個,那麼()可以省略: 物件 方法名 引數

三.流程控制

1.塊表示式

{ }包裹的一塊程式碼稱之為塊表示式,塊表示式有返回值,返回值為{ }中最後一行表示式的結果值。

val address = {
  var province: String = "GuangDong"
  var city: String = "ShenZhen"
  s"province:${province},city:${city}"
}
print(address)

列印結果

province:GuangDong,city:ShenZhen

Process finished with exit code 0

2.分支

單分支

if (布林表示式) {..}

雙分支

if (布林表示式) {..} else {..}

多分支

if (布林表示式) {..} else if(布林表示式) {..} else if(布林表示式){..} else{..}

巢狀分支

if (布林表示式) { if (布林表示式) {..}}

注意

分支有返回值的,返回值為滿足條件的一個分支的{}的最後一行表示式的結果值。
如果if在方法中,有return的時候,返回值就不一定是最後一行表示式的結果值。

3.迴圈

for迴圈

1)to方法

左右閉合。1 to 10也等價於1.to(10) ,結果: 1-10的集合

val list = 1 to 10
println(list.toBuffer)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Process finished with exit code 0

2)until方法

左閉右開。1 until 10也等價於1.until(10) ,結果: 1-9的集合

同上

3)for迴圈基本語法

for(變數 <- 陣列/集合/表示式) {..迴圈體..}

for(i <- 1 to 10){
  print(i)
}

4)守衛

for(變數 <- 陣列/集合/表示式 if 布林表示式)

for(i <- 1 to 10 if(i%2==0)){
  print(i)
}

注意:如果if之前有程式碼語句,那麼if不能提到迴圈後面,只能放在迴圈體中

5)巢狀迴圈

for(變數 <- 陣列/集合/表示式;變數 <- 陣列/集合/表示式)
6)引入變數: for(變數 <- 陣列/集合/表示式;val 變數名 = 變數值;變數 <- 陣列/集合/表示式)
7)for迴圈的返回值:

for(變數 <- 陣列/集合/表示式) yield {..}

新增yield以後每個{ }都有一個返回值。

4.實現java的continue和break

break

//導包
import scala.until.control.Breaks._
//使用
breakable{
	while(..){
		if(...) break()
	}
}

continue

//導包
import scala.until.control.Breaks._
//使用
while (...){
  breakable(){
    if(...)break()
  }
}