対話型評価環境(REPL)
まずは、Scalaの対話型評価環境(REPL、Read-eval-print loop)を試してみましょう。対話型評価環境では、ほぼすべてのScalaの機能をコンパイルすることなく試すことができます。なお、REPLは1文ごとに自動で型を表示してくれるので、参考にしてください。REPLはコマンドプロンプトで「scala」とタイプすると起動し、「exit」とタイプすると終了します。
ここからしばらくの間は、このREPLを使って解説していきます。コマンドラインかターミナル上で、「scala」とタイプしてREPLモードに遷移してください。
Scalaの基本文法
Scalaは、オブジェクト指向が徹底されています。そのため、リテラルも変数も関数も、値を返すオブジェクトです。そして、ifやforなどの制御構造も値を返します。制御構造は、JavaやC言語ユーザーにとって違和感のない表記法が採用されています。表2は、リテラルとコメントの一覧です。ヒアドキュメントで記述すると、エスケープ文字や改行を、そのまま書くことができます。なお、scaladocとはjavadocと同じで、ソースコード中のscaladocコメントから、ドキュメントを生成するためのコメント形式です。
| 数値 | 1, 1.0, 0x1F, 017,777L |
| Boolean | true, false |
| 文字 | 'a' |
| 文字列 | a , '\u0041', "abc", "\u0041\u0042" |
| ヒアドキュメント | """C;\scala\test""" ※URLや、複数行の文字列を扱うのに便利です。 |
| 1行コメント | // 1行コメントです |
| 複数行コメント | /* 複数行 コメントです */ |
| scaladocコメント | /** クラス・メンバの説明 */ |
変数
変数の書式は、次のとおりです。
宣言詞 変数名 : 変数の型 = 初期値
「: 変数の型」の部分は大抵の場合、省略可能です。省略した場合はScalaコンパイラが自動で型を判定します(型推論)。なお、変数には3種類あるので順に解説していきます。
1)var(再代入可能)
var(再代入可能)は書き換え可能な変数です(LIST1)。
scala> var testVar = 1 //変数を宣言&初期化
testVar: Int = 1
scala> testVar = 2 //再代入可能
testVar: Int = 2
scala> testVar = "asdf" //異なる型の値を代入する事はできない
<console>:5: error: type mismatch;
found : java.lang.String("asdf")
required: Int
testVar = "asdf"
2)val(再代入不可能)
val(再代入不可能)は、Javaのfinal、C/C++のconstに相当し、書き換え不可能な変数です(LIST2)。
scala> val testVal = 1
testVal: Int = 1
scala> testVal = 2 //再代入は出来ない
<console>:5: error: reassignment to val
testVal = 2
^
3)lazy val(再代入不可、遅延評価)
lazy val(再代入不可、遅延評価)は、valと同じですが、初めて参照されたときにメモリ領域が確保されます。LIST3の時点で、はじめてメモリ上に確保されますが、メンバ変数をlazy valとして宣言しておくと効率的にメモリを使用できます。
scala> lazy val testLazyVal = 1 //宣言と初期化
testLazyVal: Int = 1
// この時点では、メモリ上には存在しない。
scala> val test = testLazyVal //参照されると、メモリ上に確保される
test: Int = 1

