如果你之前是一名 Java 程序員,并了解 Java 語言的基礎知識,那么你能很快學會 Scala 的基礎語法。
一、基本語法
Scala 基本語法需要注意以下幾點:
-
區分大小寫 - Scala是大小寫敏感的,這意味著標識Hello 和 hello在Scala中會有不同的含義。
-
類名 - 對于所有的類名的第一個字母要大寫。
如果需要使用幾個單詞來構成一個類的名稱,每個單詞的第一個字母要大寫。示例:class MyFirstScalaClass
-
方法名稱 - 所有的方法名稱的第一個字母用小寫。
如果若干單詞被用于構成方法的名稱,則每個單詞的第一個字母應大寫。示例:def myMethodName()
-
程序文件名 - 程序文件的名稱應該與對象名稱完全匹配(新版本不需要了,但建議保留這種習慣)。
保存文件時,應該保存它使用的對象名稱(記住Scala是區分大小寫),并追加".scala"為文件擴展名。 (如果文件名和對象名稱不匹配,程序將無法編譯)。示例: 假設"HelloWorld"是對象的名稱。那么該文件應保存為’HelloWorld.scala"
-
def main(args: Array[String]) - Scala程序從main()方法開始處理,這是每一個Scala程序的強制程序入口部分。
二、標志符
Scala 可以使用兩種形式的標志符,字符數字和符號。
字符數字使用字母或是下劃線開頭,后面可以接字母或是數字,符號""在Scala中也看作為字母。然而以""在 Scala 中也看作為字母。然而以""在Scala中也看作為字母。然而以"“開頭的標識符為保留的 Scala 編譯器產生的標志符使用,應用程序應該避免使用”$"開始的標識符,以免造成沖突。
Scala 的命名規則采用和 Java 類似的 camel 命名規則,首字符小寫,比如 toString。類名的首字符還是使用大寫。此外也應該避免使用以下劃線結尾的標志符以避免沖突。符號標志符包含一個或多個符號,如+,:,? 等,比如:
+ ++ ::: < ?> :->
Scala 內部實現時會使用轉義的標志符,比如:-> 使用 coloncoloncolonminus$greater 來表示這個符號。因此如果你需要在 Java 代碼中訪問:->方法,你需要使用 Scala 的內部名稱 coloncoloncolonminus$greater。
混合標志符由字符數字標志符后面跟著一個或多個符號組成,比如 unary_+ 為 Scala 對+方法的內部實現時的名稱。字面量標志符為使用"定義的字符串,比如 x
yield
。
你可以在"之間使用任何有效的 Scala 標志符,Scala 將它們解釋為一個 Scala 標志符,一個典型的使用為 Thread 的 yield 方法, 在 Scala 中你不能使用 Thread.yield()是因為 yield 為 Scala 中的關鍵字, 你必須使用 Thread.yield
()來使用這個方法。
三、Scala 關鍵字
下表列出了 scala 保留關鍵字,我們不能使用以下關鍵字作為變量:
abstract | case | catch | class |
---|---|---|---|
def | do | else | extends |
false | final | finally | for |
forSome | if | implicit | import |
lazy | match | new | null |
object | override | package | private |
protected | return | sealed | super |
this | throw | trait | try |
true | type | val | var |
while | with | yield | |
- | : | = | => |
<- | <: | <% | >: |
# | @ |
四、注釋
Scala注釋很像Java和C ++注釋。
多行注釋以/開頭,以/結束。
/*This is a multiline comment:
*/
單行注釋用//開頭,并繼續到行尾:
// This is a single line comment
在Scala中,還可以嵌套多行注釋:
/*
This is an outer comment
/* And this comment
is nested
*/
Outer comment
*/
五、Scala分號
分號是表達式分隔符,它們是推斷的。
Scala將行的結尾視為表達式的結尾,除非它可以推斷表達式繼續到下一行,如下例所示:
例子
以下Trailing equals符號表示下一行上有更多代碼。
def equalsign(s: String) = println("equalsign: " + s)
以下開頭的大括號表示下一行有更多的代碼。
def equalsign2(s: String) = { println("equalsign2: " + s) }
以下跟蹤逗號,句點和運算符在下一行指示更多代碼。
def commas(s1: String, s2: String) = Console. println("comma: " + s1 + ", " + s2)
六、Scala 包
定義包
Scala 使用 package 關鍵字定義包,在Scala將代碼定義到某個包中有兩種方式:
第一種方法和 Java 一樣,在文件的頭定義包名,這種方法就后續所有代碼都放在該包中。 比如:
package com.runoob
class HelloWorld
第二種方法有些類似 C#,如:
package com.runoob {class HelloWorld
}
第二種方法,可以在一個文件中定義多個包。
引用
Scala 使用 import 關鍵字引用包。
import java.awt.Color // 引入Colorimport java.awt._ // 引入包內所有成員def handler(evt: event.ActionEvent) { // java.awt.event.ActionEvent... // 因為引入了java.awt,所以可以省去前面的部分
}
import語句可以出現在任何地方,而不是只能在文件頂部。import的效果從開始延伸到語句塊的結束。這可以大幅減少名稱沖突的可能性。
如果想要引入包中的幾個成員,可以使用selector(選取器):
import java.awt.{Color, Font}// 重命名成員
import java.util.{HashMap => JavaHashMap}// 隱藏成員
import java.util.{HashMap => _, _} // 引入了util包的所有成員,但是HashMap被隱藏了