Scala簡介及基礎語法
阿新 • • 發佈:2018-12-31
一、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)