昨日、Scala のインストールが終わったので、今日から使ってみよう。
適当なフォルダに移動して sbt console コマンドで REPL を起動する。そして “Hello, World!” と入力してみる。
scala> "Hello, World!"
res0: String = Hello, World!
1行目が REPL のプロンプトと入力、2行目がそのレスポンスだ。ここでは入力された値が String 型で Hello, World! という値を持つことが表示されている。res0 ってのは REPL が勝手につけた名前らしい。これは後から使うこともできる。
scala> res0
res1: String = Hello, World!
いくつか値を入力してみよう。
scala> 123
res2: Int = 123
scala> 12345L
res3: Long = 12345
scala> 1.23
res4: Double = 1.23
scala> 1.23e4
res5: Double = 12300.0
scala> 1.0 == 1
res6: Boolean = true
それぞれ Int とか Double とかの型に解釈されている。Scala には型推論の機能が備わっているので、型を宣言しなくても適当な型に解釈してくれる。
次、変数。Scala では変数は宣言してからでないと使えない。変数の宣言には var と val の2つがあって、前者は再代入が可能だけど、後者は再代入できない。試してみよう。
scala> var x = 3
x: Int = 3
scala> x = 5
x: Int = 5
scala> x
res7: Int = 5
scala> val y = 2
y: Int = 2
scala> y = 7
<console>:12: error: reassignment to val
y = 7
^
var で宣言した x には再代入できているけど、val で宣言した y に再代入したらエラーになっているのがわかる。
Scala では基本的に再代入できない val で宣言した変数を使い、var はあまり使わないとのこと。このへんは関数型プログラミングらしいところかな。
ちなみに、var で宣言した x に再代入することはできるけど、宣言の時に型推論が働いて x の型は Int になっている。なので Int 以外の型を代入することはできない。
scala> x = "hello"
<console>:12: error: type mismatch;
found : String("hello")
required: Int
x = "hello"
^
さて、ここまでは変数の型は型推論に任せてきたけど、明示的に宣言することもできる。次のようにする。
scala> val z: Int = 3 * 3
z: Int = 9
型を変数名の後につけるのは Go に似てるな。
以上、とりあえずここまで。