1. 程式人生 > >scala 入門(1) -- 入門初探

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 中進行,也可以在 指令碼檔案中執行程式

  1. 把以下程式碼儲存在 hello.scala 檔案中
println("hello,word from scala script")
  1. 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 的簡明扼要進發

如有錯誤,請指出!