1. 程式人生 > >Scala基礎語法、函式及Array、Map、Tuple

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課程第一課