|
前回,Scalaの3種類の実行方法を学びましたので,今回は基本的な文法を説明していきます。
Scalaのぶっ飛んだ特徴を早く説明したいところですが,千里の道も一歩から。じっくり楽しみつつ,進んでいきましょう。
1.変数
最初にScalaの変数について説明します。ここでは,すべてscalaの対話式実行環境(本連載ではScalaインタプリタと言います)で説明したいと思います。scalaのインストール方法や実行方法は連載第1回を参照してください。
Scalaインタプリタの実行方法は,引数なしでscalaとタイプするたけです。後はコマンドを打ち込んでいくだけで,その行が評価されます。
>scala Welcome to Scala version 2.7.1-final (Java HotSpot(TM) Client VM, Java 1.5.0_14) . Type in expressions to have them evaluated. Type :help for more information. scala>
早速,実際にコードを打ちこみながら試してみましょう。
Scalaでは,「val」と「var」という2種類の変数があります。valは,再代入不可の変数で,Javaで言うとfinal句がついた変数に相当します。一方,varは再代入可の変数で,Javaで言うとfinal句がついていない普通の変数に相当します。
ちなみに,「val」はvalueの略で,valueとは「データや一つのオブジェクト」を指す言葉です。「var」のほうは,普通にvariable(変数)の略ですね。
最初にvalを使った変数定義から見ていきましょう。
scala> val num = 2 num: Int = 2
numという変数に2を代入してみました。Scalaインタプリタがnum: Int = 2
という結果を返しています。これは,Int型のnumという名前の変数を定義して,2で初期化したという意味です。
このnumの型は,Scalaインタプリタが型を推論して決定します。例えば,文字列を入れるとこうなります。
scala> val string = "scala" string: java.lang.String = scala
では実際に,変数を使ってみます。
scala> num * 2 res0: Int = 4
前述の通り,valタイプの変数は再代入できません。実際に再代入しようとすると,
scala> num = 5 <console>:7: error: assignment to immutable value num = 5 ^
きっちりエラーになりました。
次にvarを使ってみましょう。こちらは再代入可能です。
scala> var num = 3 num: Int = 3 scala> num = 4 num: Int = 4
ちゃんと再代入できています。ではここに文字列型を代入してみましょう。
scala> num = "scala" <console>:7: error: type mismatch; found : java.lang.String("scala") required: Int num = "scala" ^
しっかりエラーになりました。Rubyの変数の動的型と異なり,Scalaでは,変数に違う型のインスタンスを代入するとエラーが起こります。これは,プログラマが明示的に型を指定しなくても,定義した時点でScalaが型を決定するからです。
変数に明示的に型を定義したい場合は,変数名の後にコロン「:」で指定します。
scala> var num:Int = 3 num: Int = 3 scala> var num:Int = "string" <console>:4: error: type mismatch; found : java.lang.String("string") required: Int var num:Int = "string" ^
当然,指定した型と右辺が異なればエラーになります。この明示的な型指定は,もちろんvalでも使用可能です。