Scala基礎語法、函式及Array、Map、Tuple
第一課
內容概述
1.Scala基礎語法
2.Scala中函式
3,Scala中的Array、Map、Tuple
Scala基礎
1. Scala的重大價值
首先,java並不偉大,偉大的是JVM(來自於java之父),而scala是基於JVM的。Scala可以呼叫所有的java的庫,scala是升級版的java。升級之一切皆物件,物件皆有方法,列如整型常量1,在scala裡也是有方法的,1.tostring()在scala裡是合法的。升級之二面向函式和麵向物件的結合,面向物件有利於團隊開發,而面向函式則有利於方法的書寫,適合大型專案,通常是java開發專案的程式碼量的1/5-1/10。
Scala主要用於大資料中的大資料計算,spark是有scala開發的,實現演算法簡潔優雅,kafka通訊中介軟體是由scala開發的。
Spark環境:版本2.10.4 + java1.80.60-b27
2. Scala基礎語法
變數的宣告:var 可變變數宣告,val int a
val 不可變變數宣告,val int a
對於變數來說,儘可能使用不可變變數進行宣告,因為在處理資料時,大多數是不可變的,例如spark內部資料的預設型別是不可變,許多通訊交流時,通訊物件是不可變的。在宣告變數時可以宣告型別也可以不宣告型別,但是宣告型別後,賦值時,只能賦值同類型或子型別的值。
Java中存在基本型別和封裝型別,但是scala中基本型別和引用型別是可以自動轉換的,即基本型別也是有方法的,如1.tostring()(一切皆物件),再如,1+1 執行時是1.+(1)。
Scala中無++、——操作符,但是可以用 +=、-=代替,scala提供了大量的庫,如scala.math._庫中min()、max()。
在建立物件時,scala是呼叫object的apply方法進行的,類似於java中的工廠方法。
Scala中表達式是有結果或返回值的,這點與java不同,程式碼塊的返回值是,程式碼塊的最後一行的內容的值。
3. Scala函式入門
輸入函式:println(“ a b c ”) //輸出結果後換行
println<=> println() //輸出為空
print //輸出後不換行
print(“\n”)<=> println
printf(“%s”,s) //格式化輸出
讀入函式 readLine <=>redline() //無提示符讀入
readInt //讀取指定整型型別的值
迴圈結構:while迴圈
for迴圈: for(i <- 0 to 20 ) println(i)
for(i<- 0 to 20 if i % 2 == 0) println(i)
函式定義 def f1:int = { 函式體 } (最後一行為返回值)
在函式定義時,若是無法推斷函式的返回值時,函式必須顯示宣告返回值。
預設引數:def f1(param1:int, param2:String = “spark”) = param1 + param2
變長引數:def f1(param:int*) = {}
range轉換為函式引數:1 to 100 : _* 把range中的所有元素提取出來。
過程即是沒有返回值的函式。
Lazy變數:只有在第一次呼叫時才執行的變數,一般用於耗時的操作中,如檔案的讀取。
異常處理:try{
}catch{
}finally{
}
catch程式碼塊中用於捕獲異常,finally始終執行,用於一些類似於關閉檔案的操作。
4. Scala 中Array、Map、Tuple
Array可以先聲明後賦值,亦可以直接賦值。例如
Val array = Array[Int](5)
array(1) = 2
val array = Array (1, 2, 3, 4)
可變陣列ArrayBuffer,可以加入任意數量的元素,不會出現陣列越界。
加入操作:arrayBuffer += (2,3,4)
刪除操作:.trimStart(n) //從陣列的頭開始刪除n個元素
.trimEnd(n) //從陣列的尾開始刪除n個元素
.remove(d) //從陣列中刪除第d位的元素
並返回刪除元素的值
.remove(d,n) //刪除陣列中從d位算起的其後n個數
插入操作:.insert(d,x)//在d位插入元素,其中可以插入一個或多個元素
轉換操作:arraybuffer.toArray //將可變陣列轉換為不可變陣列
Array.toBuffer //將不可變陣列轉換為可變陣列
陣列遍歷:for(i<- 0 until (arr.length, 2)) println(arr(i))
for(i <- (0 untilarr.length) .reverse) println(arr(i))//從尾部開始遍歷
陣列轉換為字串:arr.mkString(“,”)
排序: scala.util.Sortint.quickSort(arr)
遍歷時可以使用yield,其將收集yield後的表示式的值並組成一個Array
for (i <- arr if i % 3 == 0) yield i*i
過濾: arr.filter(_ % 3 == 0).map( i => i*i )
Map儲存的是鍵值對
val person = map(“spark” -> 6, “hadoop” -> 11) //賦值
person += (“flink”-> 5) //新增
person -= (“flink” -> 5) //刪除
person.contains(“spark”) //包含
person.getorElse(“spark”,100) <=>
if(person.contains(“spark”)person(“spark”)else 100)
for((key,value) <- person) println(key + ” ”+value) //遍歷
scala.collection.immutable.SortedMap(“key”->value)//按key值排序
tuple元組 val tuple = (“spark”, 6, 9, 6) //賦值
tuple._1 //取元組中位置為1的元素
說明:該筆記來源於DT大資料IMF課程第一課