[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を使用しましょう。