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()
}
}