好程序員大數(shù)據(jù)學(xué)習(xí)路線分享Scala系列之基礎(chǔ)篇了解Scala
銅山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),銅山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為銅山上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的銅山做網(wǎng)站的公司定做!
Scala 是 Scalable Language 的簡寫,是一門多范式的編程語言。
Scala設(shè)計(jì)的初衷是要集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。Scala運(yùn)行于Java平臺(Java虛擬機(jī)),并兼容現(xiàn)有的Java程序。
函數(shù)式編程兩種理念:就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此,任意一個函數(shù),只要輸入是確定的,輸出就是確定的,這種純函數(shù)我們稱之為沒有副作用。而允許使用變量的程序設(shè)計(jì)語言,由于函數(shù)內(nèi)部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數(shù)是有副作用的。
函數(shù)式編程的一個特點(diǎn)就是,函數(shù)也是值,同允許把函數(shù)本身作為參數(shù)傳入另一個函數(shù),還允許返回一個函數(shù)!
Scala 是面向?qū)ο蟮?/strong>
Scala是一個純面向?qū)ο蟮恼Z言,所有的值都是對象,類和對象行為用類和特質(zhì)來描述.
Scala 是函數(shù)式的
Scala中函數(shù)是高等公民,所有函數(shù)都是值.
Scala是靜態(tài)類型的
Scala 是可擴(kuò)展的
1.優(yōu)雅:這是框架設(shè)計(jì)師第一個要考慮的問題,框架的用戶是應(yīng)用開發(fā)程序員,API是否優(yōu)雅直接影響用戶體驗(yàn)。
2.速度快:Scala語言表達(dá)能力強(qiáng),一行代碼抵得上Java多行,開發(fā)速度快;Scala是靜態(tài)編譯的,所以和JRuby,Groovy比起來速度會快很多。
3.能融合到Hadoop生態(tài)圈:Hadoop現(xiàn)在是大數(shù)據(jù)事實(shí)標(biāo)準(zhǔn),Spark并不是要取代Hadoop,而是要完善Hadoop生態(tài)。JVM語言大部分可能會想到Java,但Java做出來的API太丑,或者想實(shí)現(xiàn)一個優(yōu)雅的API太費(fèi)勁。
?
因?yàn)镾cala是運(yùn)行在JVM平臺上的,所以安裝Scala之前要安裝JDK
下載Scala然后解壓Scala到指定目錄
tar -zxvf scala-2.10.6.tgz -C /usr/java
配置環(huán)境變量,將scala加入到PATH中
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin:/usr/java/scala-2.10.6/bin
目前Scala的開發(fā)工具主要有兩種:Eclipse和IDEA,這兩個開發(fā)工具都有相應(yīng)的Scala插件,如果使用Eclipse,直接到Scala官網(wǎng)下載即可。
?
由于IDEA的Scala插件更優(yōu)秀,大多數(shù)Scala程序員都選擇IDEA,可以到下載社區(qū)免費(fèi)版,點(diǎn)擊下一步安裝即可,安裝時如果有網(wǎng)絡(luò)可以選擇在線安裝Scala插件。這里我們使用離線安裝Scala插件:
?
1.安裝IDEA,點(diǎn)擊下一步即可。由于我們離線安裝插件,所以點(diǎn)擊Skip All and Set Defaul
2.下載IEDA的scala插件
3.安裝Scala插件:File -> settings -> Plugins -> Install plugin from disk -> 選擇Scala插件 -> OK -> 重啟IDEA
使用var 聲明一個變量。
scala語言是強(qiáng)類型語言。
var修飾的變量,內(nèi)容和引用都可變
使用val聲明一個常量或值
val修飾的變量是不可變的,注意不可變的不是內(nèi)容,而是引用;
val修飾的變量,相當(dāng)于Java中final修飾的變量;
只有val修飾的變量才能被lazy修飾;使用lazy定義變量后,只有在調(diào)用該變量時才會實(shí)例化這個變量的值。而且惰性變量只能是不可變變量;
//變量定義方式
var?a:int?= 1
var?aa = 1
val?aaa:Int = 3
val?aaaa = 4
lazy?val?aaaaa = 4
官方推薦使用val。
2.val和var區(qū)別示意:
可以使用數(shù)組,更容易懂
class?A(n: Int) {
?var?value = n
}
class?B(n: Int) {
?val?value =?new?A(n)
}
object?Test {
?def?main(args: Array[String]) {
?val?x =?new?B(5)
?x =?new?B(6)?//?錯誤?
?x.value?=?new?A(6)?//?錯誤?
?x.value.value?= 6?//?正常
?}
}
3.lazy
類似方法,先聲明,后調(diào)用
4.val or var
在val和var均可的條件下,官方推薦使用val
Scala和Java一樣,有7種數(shù)值類型Byte、Char、Short、Int、Long、Float、Double和一個Boolean類型,
和Java不同的是 ,Scala沒有基本類型與包裝類型之分,這些類型都是類,有自己的屬性和方法。
相當(dāng)于Java的包裝類;
1.toString()
1.to (10)
scala類型層級關(guān)系:
scala中所有的值都有類型,包括數(shù)值和函數(shù).
scala 類型轉(zhuǎn)換:
????val?x: Long = 987654321
????val?y: Float = x ?// 9.8765434E8 (note that some precision is lost in this case)
????val?face: Char = '?'
????val?number: Int = face ?// 9786
Scala中沒有操作符,只是以操作符的格式去進(jìn)行方法調(diào)用。
//數(shù)學(xué)運(yùn)算符
+、-、*?、/、%
//關(guān)系操作符
> < >= <= !
//邏輯操作符
&& ||
//位操作符
| & ^ ~
//比較對象是否相等
==?!=
注意:
a + b 等價于 a.+(b)
Scala沒有++,-- 可以用+=,-=代替
操作符都是方法的重載,是方法的調(diào)用