scala 入門(1) -- 入門初探
參考
《Scala 程式設計》
Scala 直譯器
直接在 cmd 中輸入 scala 即可進入其直譯器中進行運算
>scala
Welcome to Scala 2.12.5 (Java HotSpot(TM) 64-Bit Server VM, Java 9.0.4).
Type in expressions for evaluation. Or try :help.
scala> 1+1
res0: Int = 2
輸入 1+1
輸出 res0: Int = 2
, 其中依次為:
- 自動產生的或使用者定義的結果名稱
- 冒號(:)及表示式的型別
- 等號(=)
- 表示式經過計算的結果
變數定義
變數型別
val
, 只能進行一次永久性賦值var
, 可隨時修改相應的值
Note:如果嘗試給 val 變數再次賦值的話,直譯器會報錯
<console>:12: error: reassignment to val
定義形式
var variable: type = value
比如定義一個字串
scala> val s: java.lang.String = "hello!"
其中,java.lang.String
是相應的 String 類,我們也可以使用簡化名 String
來定義變數(常見的資料型別都有其簡化名,比如 Int):
scala> val s: String = "hello!"
另外,scala 還具有型別推斷的功能,一般情況下,我們可以不用定義資料型別
scala> val s = "hello!"
s: String = hello!
函式定義
函式的基本定義如下(以找兩數的最大值為例):
下面幾點是需要注意的:
- 函式的引數必須帶上型別定義,因為 scala 不能對引數進行型別推斷
- 函式的結果型別有些時候可以不定義,但在某些情況下(比如遞迴),是一定要說明定義的。建議最好都帶上,方便閱讀理解程式碼
- 如果函式只有一條語句,是可以省略大括號的
- 當沒有返回值時,結果型別為 Unit
- 上面的函可以寫成下面形式
scala> def max(x:Int, y:Int) = if(x>y) x else y
max: (x: Int, y: Int)Int
scala> max(5, 3)
res1: Int = 5
scala 指令碼
其實,scala 跟 python 的執行時有點類似的,可以直接互動 shell 中進行,也可以在 指令碼檔案中執行程式
- 把以下程式碼儲存在 hello.scala 檔案中
println("hello,word from scala script")
- cmd 中執行命令
>scala hello.scala
hello,word from scala script
另外,在編譯執行 scala 檔案時,也可以傳遞引數,scala 會將他們儲存在 args 陣列中,可以使用 foreach 進行列舉遍歷
args.foreach(arg: String => println(arg))
這裡把函式字面量(function literal) arg: String => println(arg)
傳入到 foreach 中,把上述程式碼放到 hello.scala 並執行
>scala hello.scala this is args
hello,word from scala script
this
is
args
顯而易見,args 陣列中的元素分別被 println 打印出來
Note:函式字面量,也即匿名函式,類似於 java 或 python 中的 lambda 函式
還有的就是,對相關元素,scala 一樣具有推斷型別的能力,加上當函式字面量只有一行且只有一個引數時,可以省略引數,程式碼可以精簡為:
args.foreach(println)
最後
繼續向 scala 的簡明扼要進發
如有錯誤,請指出!