scala語言-學習日記(一)

Scala語言是一個較爲抽象的語言,因爲這門語言結合了面向對象的編程思想和麪向函數的一門語言;

函數式編程功能強大,用起來倍爽,所以一定熟練掌握;

Scala是一種針對JVM 將面向函數和麪向對象技術組合在一起的編程語言。Scala編程語言近來抓住了很多開發者的眼球。它看起來像是一種純粹的面向對象編程語言,而又無縫地結合了命令式和函數式的編程風格。Scala融匯了許多前所未有的特性,讓開發者能夠很好的而同時又運行於JVM之上。隨着大數據的日益發展,scala必定會成爲必不可少的開發語言。

爲什麼要學習scala?

1、代碼規範而且好看:這是框架設計師第一個要考慮的問題,框架的用戶是應用開發程序員,API是否優雅直接影響用戶體驗。

2、速度快:Scala語言表達能力強,一行代碼抵得上Java多行,開發速度快;Scala是靜態編譯的,所以和JRuby,Groovy比起來速度會快很多。

3、能融合到Hadoop生態圈

4.因爲我們要學習的spark和kafka等它的底層語言是scala寫的,學習scala能夠有助於我們編寫spark代碼及閱讀源碼。

Scala的安裝

首先安裝jdk,推薦1.8版本

下載scala-2.10.6.msi文件解壓安裝即可

注:環境變量會自動進行安裝

Scala基礎學習

學習任何一門語言,都有着相同的路數。所以對於現在的我們而言。Scala的學習相對來說會容易一些。

Scala的數據類型

定義變量

val name=」max」

注意:scala有個原則就是極簡原則,不用寫的東西一概不寫。

定義變量有兩種形式

一種是像上面那樣用val修飾另一種是var進行修飾

val 定義的變量不可變相當與java中的final

用表達式進行賦值

Val x=1

Val y=if(x>0) 1 else -1

混和表達式

Val 1 =if (x>0) 1 else 「jay」

需要注意的是any是所有的父類,相當於java裏的object

else缺失的表達式

val p=if (x>5) 1

注意:Unit相當於java中的void

if 語句定義變量加深學習

請編寫一個用if, else if, else賦值的例子

Val x=0

Val z={

}

For 循環

For循環區間:

 

Val res=1 to 10

for(i<-res){

println(i)

}

 

for 循環數組

 

val arr=Array(「a」,」b」,」c」)

for(i<-arr)

println(i)

 

高級for循環

 

for (i<- 1 to 4;j<- 1 to 4 if i!=j)

println(10*i+j+」 」)

使用for循環生成一個數組

Val z=for (i<-1 to 3) yield i*10

 

加深練習

需求說明:定義一個數組val a1=Array(1,2,3,4,5,6,7,8,9)把其中的偶數取出。

懶加載

Val lazyVal={println(「I am too lazy」);1}

lazy val lazyVal={println(「I am too lazy」);1}

方法與函數

定義一個方法:

def method(a:Int,b:Int):Int=a*b

method(3,5)

定義一個函數:

Val f1=(x:Int,y:Int)=>x+y

f1 (1,2)

匿名函數

(x:Int,y:Int)=>x+y

匿名函數舉例

方法和函數的區別

在函數式編程語言中,函數是「頭等公民」,它可以像任何其他數據類型一樣被傳遞和操作,函數可以在方法中傳遞。

 

def m1(f(Int,Int)=>Int)={f(2,3)}

val f1=(x:Int,y:Int)=>x+y

val f1=(x:Int,y:Int)=>x+y

val a=m1(f1)

val b=m1(f2)

 

通過方法轉變爲函數

集合

List

不可變的list

 

可變的list

val lst0=ListBuffer[Int](1,2,3)

  val lst1=new ListBuffer[Int]

lst1+=4         lst1發生改變

  lst1+=5

val lst4=lst1:+6   lst1沒有改變

Set

Map

Tuple

Val t=()