Scala特點(diǎn)
面向?qū)ο缶幊?br>
面向函數(shù)式編程
靜態(tài)類型語(yǔ)言
動(dòng)態(tài)類型語(yǔ)言python(變量a的數(shù)據(jù)類型:運(yùn)行階段確定)和靜態(tài)類型語(yǔ)言java.scala(變量a的數(shù)據(jù)類型:編譯階段確定的)
基于JVM(aa.scala->aa.class(java))->JVM
為什么要學(xué)
(1) 速度快
(2) 優(yōu)雅
(3) 融入大數(shù)據(jù)生態(tài)圈,為了深入學(xué)習(xí)spark肛冶,scala語(yǔ)言
(4) Kafka也是用scala語(yǔ)言實(shí)現(xiàn)的
Scala定義變量
Var 變量名 = 初始化值
Var 變量名:數(shù)據(jù)類型 = 初始化值
注意:
(1) 定義變量的時(shí)候需要初始化
(2) 定義變量的時(shí)候可以不指定變量的數(shù)據(jù)類型街氢,系統(tǒng)會(huì)根據(jù)變
量的初始化值推斷變量的數(shù)據(jù)類型
Var a =1
Scala定義常量
Var 常量名 = 初始化值
Var 常量名:數(shù)據(jù)類型 = 初始化值
注意:
(1) val修飾的變量扯键,相當(dāng)于java中的final修飾的變量
(2) val修飾的變量睦袖,變量的類型是基本數(shù)據(jù)類型也就是值類型(相當(dāng)于java的基本數(shù)據(jù)類型,Int Double Boolean)荣刑,它的值是不可以修改的
val a = 10
a = 100//不可以
val修飾的變量馅笙,變量的類型是引用類型,引用不可變厉亏,引用的內(nèi)容可變
val a1 = Array(1,2,3)
val a2 = Array(4,5,6)
a1 = a2//不可以的董习,引用不變
a1(1) = 10 //可以的,引用的內(nèi)容可變
val修飾的變量爱只,還可以用lazy修飾(var不能用)皿淋,值是在需要使用的時(shí)候賦值
val ?var
在能使用val的時(shí)候,盡量使用val
數(shù)據(jù)類型
(1)值類型(java中的基本數(shù)據(jù)類型)和引用類型
(2)值類型是類類型窝趣,沒(méi)有基本數(shù)據(jù)類型和包裝類之分
scala> 1 to 10
res5: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> 1.to(10)
res6: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
在這里1是int類的對(duì)象疯暑,可以調(diào)用to方法
這里AnyVal是值類型,AnyRef是引用類型哑舒,Unit與void很像
操作符
數(shù)學(xué)運(yùn)算符:+ - * / %
關(guān)系運(yùn)算符:> >= < <= !
邏輯運(yùn)算符:&& ||
位運(yùn)算符:& |^
比較對(duì)象:== 妇拯!=
(1)scala中的運(yùn)算符都是方法的重載,是方法的調(diào)用
(2)scala中沒(méi)有++ --運(yùn)算符洗鸵,可以用+= -=
scala> 1+1
res7: Int = 2
scala> 1.+(2)
res8: Int = 3
scala> a +=1
scala> a
res11: Int = 11
表達(dá)式
就是一個(gè)語(yǔ)句塊越锈,包含一個(gè)或者多條語(yǔ)句
特點(diǎn):
(1)表達(dá)式是有返回值的
(2)返回值是表達(dá)式中最后一條語(yǔ)句的執(zhí)行結(jié)果
條件表達(dá)式
含有if else的語(yǔ)句塊
scala> val res = if(a>0) 100 else -100
res: Int = 100
scala> val res = if(a>0) "cch" else -100
res: Any = cch
scala> val res = if(a>0) 100
res: AnyVal = 100
scala> val res = if(a<0) 100
res: AnyVal = ()
scala> val res = if(a>0) 100 else if(a>l0)-100 else 0
<console>:12: error: not found: value l0
val res = if(a>0) 100 else if(a>l0)-100 else 0
^
scala> val a = 100
a: Int = 100
scala> val res = if(a>0) 100 else if(a>l0)-100 else 0
<console>:12: error: not found: value l0
val res = if(a>0) 100 else if(a>l0)-100 else 0
^
scala> val res = if(a>0) 100 else if(a>l0) -100 else 0
<console>:12: error: not found: value l0
val res = if(a>0) 100 else if(a>l0) -100 else 0
^
scala> val res = if(a>0) 100 else if(a<0) -100 else 0
res: Int = 100
塊表達(dá)式
scala> val res ={val a = 10
| val b = 10
| a+b}
res: Int = 20
scala> val res = {val a = 10
| val b = 20}
scala> print(res)
()
scala> val res = {print("aaa")}
aaa
scala> print(res)
()
循環(huán)
for:
for(i <- 表達(dá)式、數(shù)組膘滨、集合)
嵌套循環(huán)非常簡(jiǎn)單甘凭,在一個(gè)for循環(huán)里寫(xiě)i的取值范圍,并包括j的取值范圍和內(nèi)循環(huán)的判斷語(yǔ)句吏祸。
for循環(huán)推導(dǎo)
目的:對(duì)a集合中的每一個(gè)數(shù)乘以10得到新集合对蒲,我所做的是利用推導(dǎo)公式,用原來(lái)的集合每一個(gè)元素做運(yùn)算贡翘,放到一個(gè)新的集合里去蹈矮,最后產(chǎn)生了一個(gè)新集合。
while
while(條件語(yǔ)句){表達(dá)式}
do while
do{表達(dá)式}while(條件語(yǔ)句)