Scala基礎語法

1.Scala與Java的關係java

  Scala與Java的關係很是緊密,由於Scala是基於Java虛擬機,也就是JVM的一門編程語言。全部Scala的代碼,都須要通過編譯爲字節碼,而後交由Java虛擬機來運行,因此Scala和Java是能夠無縫互操做的。Scala能夠任意調用Java的代碼。編程

2.變量聲明數組

   聲明val常量:能夠聲明val變量來存放表達式的計算結果。網絡

   例如,val result = 1 + 1,後續這些常量是能夠繼續使用的,例如,2 * result。app

   可是常量聲明後,是沒法改變它的值的,例如,result = 1,會返回error: reassignment to val的錯誤信息。編程語言

  

  聲明var變量:若是要聲明值能夠改變的引用,可使用var變量。
  例如,val myresult = 1,myresult = 2
  可是在scala程序中,一般建議使用val,也就是常量,所以好比相似於spark的大型複雜系統中,須要大量的網絡傳輸數據,若是使用var,可能會擔憂值被錯誤的更改。
  在Java的大型複雜系統的設計和開發中,也使用了相似的特性,咱們一般會將傳遞給其餘模塊 / 組件 / 服務的對象,設計成不可變類(Immutable Class)。在裏面也會使用java的常量定義,好比final,阻止變量的值被改變。
  指定類型:不管聲明val變量,仍是聲明var變量,均可以手動指定其類型,若是不指定的話,scala會自動根據值,進行類型的推斷。
  例如,val name: String = null
  例如,val name: Any = "zhang3f"
  聲明多個變量:能夠將多個變量放在一塊兒進行聲明。
  例如,val name1, name2:String = null
  例如,val num1, num2 = 100函數

 

3.數據類型與操做符spa

  基本數據類型:Byte、Char、Short、Int、Long、Float、Double、Boolean。
  乍一看與Java的基本數據類型的包裝類型相同,可是scala沒有基本數據類型與包裝類型的概念,統一都是類。scala本身會負責基本數據類型和引用類型的轉換操做。
  使用以上類型,直接就能夠調用大量的函數,例如,1.toString(),1.to(10)。
  類型的增強版類型:scala使用不少增強類給數據類型增長了上百種加強的功能或函數。
  例如,String類經過StringOps類加強了大量的函數,"Hello".intersect(" World")。
  例如,Scala還提供了RichInt、RichDouble、RichChar等類型,RichInt就提供了to函數,1.to(10),此處Int先隱式轉換爲RichInt,而後再調用其to函數
  基本操做符:scala的算術操做符與java的算術操做符也沒有什麼區別,好比+、-、*、/、%等,以及&、|、^、>>、<<等。
  可是,在scala中,這些操做符實際上是數據類型的函數,好比1 + 1,能夠寫作1.+(1)
  例如,1.to(10),又能夠寫作1 to 10
  scala中沒有提供++、--操做符,咱們只能使用+和-,好比counter = 1,counter++是錯誤的,必須寫作counter += 1.scala

 

4.函數調用與apply函數設計

  函數調用方式:在scala中,函數調用也很簡單。
  例如,import scala.math._,sqrt(2),pow(2, 4),min(3, Pi)。
  不一樣的一點是,若是調用函數時,不須要傳遞參數,則scala容許調用函數時省略括號的,例如,"Hello World".distinct

  apply函數  Scala中的apply函數是很是特殊的一種函數,在Scala的object中,能夠聲明apply函數。而使用「類名()」的形式,其實就是「類名.apply()」的一種縮寫。一般使用這種方式來構造類的對象,而不是使用「new 類名()」的方式。  例如,"Hello World"(6),由於在StringOps類中有def apply(n: Int): Char的函數定義,因此"Hello World"(6),其實是"Hello World".apply(6)的縮寫。  例如,Array(1, 2, 3, 4),其實是用Array object的apply()函數來建立Array類的實例,也就是一個數組。

相關文章
相關標籤/搜索