Scala是基於JVM的一門編程語言,使用字節碼文件在JVM上運行,能夠與JAVA代碼無縫調用。
Scala是Spark的編程語言,看源碼和編寫Spark處理程序會用到。html
Ctrl+Shift+P 輸入:package,選擇package control:package Install。 輸入:repl,選擇sublimeREPL Tools -> SublimeREPL -> Scala
可使用;做爲行結束,也能夠不使用,可是在一行須要多條語句時候須要使用java
能夠像JAVA同樣使用{}包含代碼塊,包含的部分做爲塊執行,最後一個語句的值做爲塊表達式的返回值python
var d = if(a<10){b = b + 1;c+1} //至關於,最後一行做爲返回值 var d = if(a<10){ b = b + 1 c = c + 1 }
var d = if(a<10) b = b + 1 c = c + 1//這一行被當作新的一條語句來執行
scala> 1+1 res1: Int = 2
scala> 1+res2 res3: Int = 3
val result = 1 + 1
在Spark編程中,一般建議使用val來聲明,防止在複雜的大數據系統中值被錯誤的更改
在JAVA中這種大型複雜系統開發中,一樣用了相似的特性,如不可變類(Immuable class),裏面的變量使用final定義,從而提高系統的健壯性(robust魯棒性)編程
var res = 2
Scala在聲明變量時候能夠指定類型,如不聲明,scala會根據值自動判斷類型app
var name:String = "hello" var name:Any = 123
//錯誤 var i1,i2 = 1,2 var i1 = 1,i2 = 2 //正確 var i1,i2 = 100
scala中,沒有基本數據類型和包裝數據類型的區別,都是類。全都擁有方法。對於底層的數據類型和引用類型的轉換自動完成。jvm
1.toString 1.toString()
1.to(10) res0: scala.collection.immutable.Range.Inclusive = Range 1 to 10
支持 += -= 但不支持 -- ++編程語言
1 + 1 等於 1.+(1) 1.to(10) 等於 1 to 10
max(1,2) "Hello".toUpperCase
//實例化對象: Array(1,2,3,4) //至關於調用了,StingOps類中的apply方法 Array.apply(1,2,3,4) res0: Array[Int] = Array(1, 2, 3, 4)
//將會返回if/else最後的值做爲表達式的值(感受就是省略了return語句) val age = 30; var isAdult = if (age > 18) 1 else 0 //另外一種寫法(不經常使用) var isAdult = -1;if (age > 18) isAdult = 1 else isAdult = 0
//if和else中返回值類型不一樣時,返回值類型取兩種類型的**父類型** age = 30;if (age > 18) "adult" else 0 res0: Any = adult //當else語句不存在時,默認else的類型爲**Unit**也用**()**表示,至關於Java中的null age = 30;if (age < 18) "adult" res0: AnyVal = ()
var n = 10 while (n > 0) { print(n + " ") n -= 1 }
// 1.簡易for循環 for (i <- 1 to 10){ println(i) } //1 to 10:Range(1,2,3,4,5,6,7,8,9,10) // 2.使用until忽略上界限 for(i <- 1 until 10){ println(i) } //1 until 10:Range(1,2,3,4,5,6,7,8,9) // 3.加強for循環(更體現面向對象) for(i <- "Hello world"){ print(i+" ") }
循環嵌套ide
for (i <- 1 to 9; j <- 1 to 9) { printf("i=%d j=%d\n",i,j) //這樣就實現了循環嵌套,總共執行4*4次 } //結果以下 i=1 j=1 i=1 j=2 i=1 j=3 i=1 j=4 i=2 j=1 i=2 j=2 i=2 j=3 i=2 j=4 ... //徹底等效的JAVA代碼 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.println("i=" + i + "j=" + j + "\n"); } }
if守衛函數
for(i <- 1 to 100 if i % 2 == 0){ println(i) }
for推導式oop
for(i<- 1 to 10) yield i res0: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
import scala.util.control.Breaks val mybreaks = new Breaks import mybreaks.{break, breakable} breakable { var n = 10 for (c <- "Helloworld") { print(c + " ") if (n == 5 ) break() n -= 1 } }
// use java API System.out.print("ABC") System.out.println("ABC") // Use scala API print("ABC") print("ABC") // printf %s %d 必須使用print printf("My name is %s,I'm %d yesrs old","James",20) // input from Terminal readLine("This will show in Terminal and wait for you input") //棄用 readInt() //將會強轉爲Int import scala.io.StdIn //新標準 readf("This is a new read in method")