0501.Hello.scala

依照電腦科學的慣例, Hello World 是第一個很好且快速的 Scala 展示開始, 本頁展示了一個完整的快速範例 ...



檔名: Hello.scala


object HelloWorld {
def main(args: Array[String]): Unit = {
System.out.println("Hello, Scala!")
println(99)
}
}

Java "類別至文件"的命名約定

一處微小的改進,Scala 不需要包含類別定義的文件(File)命名來反映 class 的名稱。
一些人將發現這是對 Java 程序語言振奮人心的小變革;但你仍可以繼續使用 Java 「類別到文件」 的命名約定(The Java class-to-file naming convention),而不會出現任何問題。

YouTube Video



//Java code

public class Greetings {

public static void main(String[] args) {

for(int i = 1; i < 4; i++) {

System.out.print(i + "," );

}

System.out.println("Scala Rocks!!!" );

}

}

Here’s the output:

1,2,3,Scala Rocks!!!




scala Hello.scala


在終端機執行以 Scripting 方式的 scala 原始碼文件,

$ scala Hello.scala




Compiler - scalac


你也可使用 $ scalac Hello.scala 編譯此程序,來產出 Java Bytecode 檔, 之後你有二種方式可以來執行該檔,
  1. 使用 Scala 啟動程序
    1. $ scala HelloWorld
  2. 使用傳統的 Java 啟動程序運行產出的 Code
    1. 注意,必須將 Scala 核心庫包括在 JVM 的類別路徑
      1. $ java -classpath %SCALA_HOME%\lib\scala-library.jar;. Hello
    2. 不管使用哪一種方法,都應出現傳統的問候。
    3. Unix
      1. $ java -cp /opt/javaLibrary/scala/lib/scala-library.jar:. Hello

Tips
    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.

YouTube Video





; (Optional)


Scala裡的分號是可選的,且通常不寫。

與 Java 平台不同,如果語句很明顯是在一行的末尾終結,則 Scala 不需要分號來終結語言。但是,分號仍然受支持,而且有時候是必需的,例如,多個語句出現在同一物理行時。通常,剛剛入門的 Scala 程序員不用考慮需不需加分號,當需要分號的時候,Scala 編譯器將提醒程序員(通常使用閃爍的錯誤消息)。



object


關鍵字 object 來定義的,而不是使用 class。這是 Scala 對單例模式(Singleton pattern)的認可 — object 關鍵字告訴 Scala 編譯器這將是個單例物件,因此 Scala 將確保只有一個 HelloWorld 實例存在。

基於同樣的原因,注意 main 沒有像在 Java 編程中一樣被定義為靜態方法。事實上,Scala 完全避開了 static 的使用。

如果應用程序需要同時具有某個類型的實例和某種 「全局」 實例,則 Scala 應用程序將允許以相同的名字同時定義 classobject



def main( )


要執行 Scala 程序,你一定要提供一個有 main 方法(僅帶一個參數,Array[String]且結果類型為 Unit)的孤立單例物件名。任何擁有合適簽名的 main 方法的單例物件都可以用來作為程序的入口點.

main 的定義,與 Java code 一樣,是 Scala 程序可接受的輸入點。它的定義,雖然看起來與 Java 的定義不同,實際上是等同的:main 接受 String 陣列作為參數且不返回任何值。但是,在 Scala 中,此定義看起來與 Java 版本稍有差異。args 參數被定義為 args: Array[String]。




參數化類型符: [ ]


在 Scala 中,陣列表示為泛型化的 Array 類的實例,這正是 Scala 使用方括號(「[]」)而非尖括號(「<>」)來指明參數化類型的原因。



name: type


args 參數被定義為

args: Array[String]

為了保持一致性,整個語言中都使用 name: type 的這種模式。



: Unit = { }


與其他傳統函數語言一樣,Scala 要求函數(在本例中為一個方法)必須始終返回一個值。因此,它返回稱為 unit 的 「無值」 值。針對所有的實際目的,Java 開發人員可以將 unit 看作 void,至少目前可以這樣認為。

方法定義的語法似乎比較有趣,當它使用 = 操作符時,就像將隨後的方法體賦值給 main 標識符。事實上,真正發生的事情是:在函數語言中,就像變數和常數一樣,函數是一級概念,所以語法上也是一樣地處理。



println( ) / print( )


Scala 調用 scala 套件中的 Console Object 來輸出結果到終端機(Terminal),
  • Console.println( )
  • Console.print( )

scala.Console


object Console

The Console object implements functionality for printing Scala values on the terminal. There are also functions for reading specific values. Console also defines constants for marking up text on ANSI terminals.
            
Console 物件實作 Scala 列印類型值在終端機的功能性.

scala.Predef
  • def print(x: Any) = Console.print(x)
  • def println() = Console.println()
  • def println(x: Any) = Console.println(x)


References




Comments