[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
どのようなプログラミング言語であっても、計算した値を格納する場所「変数」が用意されています。
では、Scalaではどうやって変数を定義するのでしょうか?
ここでは、Scalaで変数を定義する方法を解説します。
変数を定義する方法には、valとvarがある
Scalaでは、val
とvar
を使用して変数を定義します。
構文は以下のとおりです。
val 変数名: 変数の型 = 値
var
の場合はval
の代わりにvar
を使用すること以外は、同じ構文です。
var 変数名: 変数の型 = 値
「変数の型」は、省略できます。
省略した場合は型推論によって、値から変数の型が決まります。
val 変数名 = 値
以下のように記載した場合は、右辺の値がInt
なので「変数 x」の型は、Int
になります。
val x = 100
valに代入できるのは1回限り
val
とvar
の定義方法は理解できました。
では、val
とvar
の違いは何でしょうか?
val
とvar
の違う点は、val
は定義した後に値を再代入できませんが、var
は定義した後に値を再代入できることです。
以下のコードは、var
を使用しているため、コンパイルすることができますが、
var x = 1 + 1 x = x * 2
以下のコードは、val
を使用しているため、コンパイルエラーになります。
val x = 1 + 1 x = x * 2
error: reassignment to val
ただし、var
であっても異なる型の値を再代入することはできません。
以下のコードは、Int
型の「変数 x」に文字列"two"を再代入しようとしたためコンパイルエラーになります。
val x = 1 + 1 x = "two"
error: type mismatch; found : String("two") required: Int
基本的にvalを使用する
val
とvar
の違いは理解できました。
では、val
とvar
のどちらを使用すればよいのでしょうか?
以下の例を見てください。
以下の例は、両方とも1から9の数を足し合わせた数を求めています。
- varを使用した例
var sum = 0 for(i <- 1 to 9) sum = sum + i
- valを使用した例
val sum = (1 to 9).foldLeft(0) {(i, s) => s + i}
上記例は、非常に短いコードであるため、バグの入り込む余地はなさそうに見えますが、コードが複雑になった場合はどうでしょうか?
var
を使用した場合は、変数 sum
が、他のコードで書き換えられていないことを考慮する必要が出てきます。
val
を使用すれば、定義後に書き換えること自体ができないため、そのような心配はありません。
基本的にはval
を使用して、どうしてもval
を使用して実装する方法がわからない場合にのみ、var
を使用しましょう。