scala helloworld

在這裏對Scala實現與Java實現的幾個不一樣之處作個介紹。html

  • 第一是Scala對HelloWorld的修飾符使用的是object。其實Scala中也有class關鍵字,那麼object關鍵字和class關鍵字有什麼區別那?簡單來講object關鍵字定義了一個匿名類,而且建立了該匿名類的單個實例(採用單例模式),該實例名爲HelloWorld。因此object中定義的方法自動都是static的。我以爲object關鍵字存在的價值之一就是創建起了面向對象和函數式的橋樑。由於在面向對象的系統中,全部方法都必須存在於類中,而函數式編程中沒有類的概念,使用函數無需new類的實例,因此object中的方法都是靜態方法,能夠直接被調用。進一步解讀請到這裏git

  • 第二是Scala中對變量的類型的定義方式是變量名在前,類型在後,中間用冒號相隔。緣由之一是代碼更可讀。由於咱們更關心變量名,而類型其次,尤爲是你擁有一個超級長的類型的狀況下(好比 HashMap<Shape, Pair<String, String>>);緣由之二聽說是這樣的方式在實現Scala類型時技術上要簡單些。進一步解讀請到這裏程序員

  • 第三是main函數的返回值是Unit,而不是Java中的Void。爲何是這樣那?我想是由於Scala爲了實現本身的類型系統,對於無顯式返回值的函數直接使用Void是不合適的。github

  • 第四是Scala中表達式最後的分號是可選的。緣由就是爲了契合函數式編程的哲學,即一切儘量的簡單。不寫分號程序員一天能夠多敲一些代碼出來。
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}


object HelloWorld  {
  def main(args: Array[String]): Unit = {
    println("Hello, World!")
  }
}


object HelloWordV2 extends App {
  println("Hello, World!")
}

 

代碼從三行減小到了兩行,Scala終於勝出了。那麼App是個什麼鬼?App是一個trait。trait又是什麼鬼?trait是Scala中的一個特殊類型,它與Java中的interface很類似,但比interface強大。HelloWordV2添加了對App的擴展後,就自動成爲了一個能夠運行的程序,因爲App中定義了main方法,因此HelloWorldV2中就無需再定義了,牛逼的地方在於HelloWorldV2的body中的代碼都會做爲main方法中的代碼被執行編程

 

不知有沒注意到其實main方法是有個叫args的參數的,那麼新版HelloWorld中如何使用該參數那?直接使用它就行。函數式編程

 

 

fava:函數

在使用靜態方法的時候須要注意一下幾個方面:this

在靜態方法裏只能直接調用同類中其餘的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是由於,對於非靜態的方法和變量,須要先建立類的實例對象後纔可以使用,而靜態方法在使用前不用建立任何對象。(備註:靜態變量是屬於整個類的變量而不是屬於某個對象的)spa

靜態方法不能以任何方式引用this和super關鍵字,由於靜態方法在使用前不用建立任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生。scala

相關文章
相關標籤/搜索