Help us understand the problem. What is going on with this article?

Scalaのvar, valの違い

More than 1 year has passed since last update.

Scalaの変数定義である、varとval、2つのそれぞれの挙動の違いとどちらを使用するべきかに調べたので、メモします。

var

こちらは、C++, javaの通常変数と同じで、値の変更が可能な変数です。
ただし、型の違う値を代入しようとするとエラーとなります。

実行例:

scala> var a = 2
a: Int = 2

scala> // 変数の値は、valueを変更可能
scala> a = 3
a: Int = 3

scala> // 違う型の値を代入すると、エラーになる。
scala> a = 2.5
<console>:12: error: type mismatch;
 found   : Double(2.5)
 required: Int
       a = 2.5

val

こちらは、C++のconst, javaのfinalと同じようなものと考えます。
最初に定義した変数の値の変更が不可能です。
もちろん、型の違う値を代入してもエラーになります。

実行例:

scala> val a = 2
a: Int = 2

scala> // 変数の値は、valueを変更不可能
scala> a = 3
<console>:12: error: reassignment to val
       a = 3
         ^
scala> // 違う型の値を代入すると、エラーになる。
scala> a = 2.5
<console>:12: error: reassignment to val
       a = 2.5
         ^

どちら使うべき?

以下の記事によると一般的にScalaではvalを使うことのほうが多いようです。
https://dwango.github.io/scala_text/basic.html#%E5%A4%89%E6%95%B0%E3%81%AE%E5%9F%BA%E6%9C%AC

yagiyuki
システム受託開発で4年、Webサービス会社で2年間の間エンジニアとして働いています。 機械学習, 検索システムの検証, 開発, 運用を主に担当しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away