前回は、Scalaの特徴と開発環境の整備方法を説明しました。2回目はいよいよ、Scalaの基本文法を学んでいきましょう。基礎編(その1)では、一度作成したら再度の代入はできない「不変なval」と、再代入可能な「可変なvar」という2種類の変数宣言を解説します。

変数:再代入の有無がポイント

 学習のためにはインタプリタで一文ずつ確認した方が理解しやすいでしょう。そこで、ここではREPLを利用します*1

「val」で再代入できない変数を定義する

 典型的な変数として、文字列型の変数を次のように定義してみます。

scala> val name = "Software"
name: java.lang.String = Software

 変数を宣言するには「val」あるいは「var」を最初に配置し、その後に変数名を記述します。この例ではvalで宣言し、初期値は代入演算子の後に続けて指定しています。また、変数宣言の文を記述しEnterキーを押すと、次の行に「name: java.lang.String = Software」と表示されます。これはnameという変数の中にString型で"Software"という値を保持していることを表します。ちなみにScalaの文字列型にはJavaの文字列型(java.lang.String)が使われます。

 valの変数は、Javaでいうfinal変数と同じ扱いです。つまり、初期値が必要で、再代入は禁止されます。試しに代入すると次のようにエラーが発生します。そういう意味では“変数”ではなく、“定数”という表現が適切かもしれません。

scala> name = "Hardware"
<console>:6: error: reassignment to val
    name = "Hardware"

再代入できる変数は「var」で定義する

 続いて、もう一つの宣言方法であるvarの場合です。こちらは再代入が可能な“普通の”変数です。

scala> var name = "Software"
name: java.lang.String = Software
scala> name = "Hardware"
name: java.lang.String = Hardware

 このようにScalaでは、一度作成したら再度の代入はできない「不変なval」と、再代入可能な「可変なvar」の2種類の変数宣言が可能です。関数型のプログラミングスタイルでは変数を再代入できないvalを原則的に利用します。なぜかについては後述します。