1. 程式人生 > >Scala簡介及基礎語法

Scala簡介及基礎語法

一、scala簡介
    官網:https://www.scala-lang.org/
    Scala語言很強大,集成了面向物件和函數語言程式設計的特點。
    執行在JVM(jdk)。
    大資料中為什麼學習scala?
    spark是scala語言編寫。
    python寫spark 挺好的
    java寫spark 很糟糕(程式碼實在是太多了)
    scala寫spark 很完美
    
二、scala特點
    1)優雅
    框架設計中第一個要考慮的問題就是API是否優雅。
    精簡的封裝。
    程式碼精簡(少)。
    2)速度快
    scala語言表達能力強。
    一行程式碼
=多行java程式碼,開發速度快。 3)完美融合hadoop生態 scala是靜態編譯,表達能力強並且程式碼量少。 三、安裝Scala 1)下載scala-2.11.8.zip 2)解壓到E:\temp\目錄下 3)配置環境變數 SCALA_HOME=E:\temp\scala-2.11.8 PATH中加入%SCALA_HOME%\bin; 四、Scala基礎語法 1)Scala程式的開始HelloWorld object HelloWorld { def main(args: Array[String]): Unit
= { println("Hello, world!") } } 2)Scala的資料型別 Scala與java一樣,有8種數值型別: Byte/Char/Short/Int/Long/Float/Double/Boolean/ 和Unit型別(void) 注意:scala中無包裝型別。 Unit:表示無值,用於不返回任何結果的方法的結果型別。 3)Scala定義變數 兩個關鍵字:val var val:定義變數值不可變 var:定義的變數值是可變的 scala編譯器會自動的推斷型別! 指定型別: val str:String
= "Hello World" 注意:型別要保持一致 Unit = ():()相當於什麼都沒有用()表示。 4)條件表示式 if:判斷 val y = if(x>0) 1 else 2 scala> val z = if(x>0) "error" else 1 z: Any = error Any:包含Anyval和AnyRef Anyval:包含scala所有型別 AnyRef:Scala classes與Java Classes Any相當於java的Object val k = if(x<0) 0 else if(x>=1) 1 else -1 if和else if:多個條件的判斷,符合條件看左側,不符合條件看右側 5)塊表示式 在scala中{}包含一系列表示式,塊中的最後一個表示式的值就是塊的值 例如: def main(args: Array[String]): Unit = { //塊表示式 val a = 1 val rs = { if(a > 2){ 1 }else if (a < 2){ -1 }else{ 0 } } println(rs) } 6)迴圈 yield:生成一個新的集合關鍵字 1.to(10).map(_*1000) map:取出元素 _:代表元祖

迴圈的一些例子:

//1、迴圈得到1到10
scala> 1 to 10
res7: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//2、迴圈換行輸出1到10
scala> for(i <- res7) println(i)
1
2
3
4
5
6
7
8
9
10

//3、迴圈不換行輸出1到10
scala> for (i <- res7) print(i)
12345678910

//4、定義變數接收迴圈得到的數字1到10
scala> val rs = 1 to 10
rs: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//5、迴圈換行輸出1到10
scala> for(x <- rs) println(x)
1
2
3
4
5
6
7
8
9
10

//6、定義一個數組
scala> val arr = Array(1,3,5)
arr: Array[Int] = Array(1, 3, 5)

//7、迴圈換行輸出陣列的值
scala> for (i <- arr) println(i)
1
3
5

//8、按要求迴圈換行輸出值
scala> for(i <- 1 to 10;j <- 1 to 5 if i != j) print((10*i+j) + " ")
12 13 14 15 21 23 24 25 31 32 34 35 41 42 43 45 51 52 53 54 61 62 63 64 65 71 72 73 74 75 81 82 83 84 85 91 92 93 94 95 101 102 103 104 105

//9、使用yield生成一個新的集合
scala> for(i <- 1 to 10) yield i*10
res14: scala.collection.immutable.IndexedSeq[Int] = Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

//10、使用to方法得到1到10
scala> 1.to(10)
res15: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//11、使用to方法和map方法得到預期的結果
scala> 1.to(10).map(_*1000)
res16: scala.collection.immutable.IndexedSeq[Int] = Vector(1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000)

//12、使用yield生成一個新的集合
scala> val a1 = for(i <- 1 to 10;if(i%2 == 0)) yield i
a1: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)