valとvarの違いは?

Kotlinの変数宣言: valとvarの違いは?

Kotlinの変数宣言: valとvarの違いは?

Kotlinで変数を宣言する際、 **val** と **var** のどちらを使うかで、その変数の性質が変わります。では、 **val** と **var** の違いは何でしょうか?

val: 再代入不可の変数を宣言

**val** (valueの略) を使って宣言された変数は、一度値を代入すると、その後は値を変更することができません。つまり、**読み取り専用の変数** となります。


fun main() {
  val name = "太郎"
  println(name) // 出力: 太郎

  name = "次郎" // エラー! valは再代入不可
}

上記のコードでは、3行目で **val name = "太郎"** と宣言し、変数 **name** に "太郎" という文字列を代入しています。その後、5行目で **name = "次郎"** と値を再代入しようとするとエラーが発生します。これは、 **val** で宣言された変数は再代入ができないためです。

var: 再代入可能な変数を宣言

一方、 **var** (variableの略) を使って宣言された変数は、何度でも値を再代入することができます。つまり、**読み書き可能な変数** となります。


fun main() {
  var age = 20
  println(age) // 出力: 20

  age = 21 
  println(age) // 出力: 21
}

上記のコードでは、3行目で **var age = 20** と宣言し、変数 **age** に 20 という数値を代入しています。その後、5行目で **age = 21** と値を再代入し、6行目で **println(age)** を実行すると、"21"と出力されます。 **var** で宣言された変数は再代入が可能であるため、値が更新されています。

valとvarの使い分け

では、 **val** と **var** はどのように使い分ければ良いのでしょうか?基本的には、**値が変更されない場合はval** を、**値が変更される場合はvar** を使用します。

変数の種類 キーワード 再代入 用途
読み取り専用 val 不可 定数、一度だけ値を設定する変数
読み書き可能 var 可能 値が変化する変数

**val** を使用することで、意図しない値の変更を防ぎ、コードの安全性を高めることができます。また、コードの可読性を向上させる効果もあります。**val** を使用することで、「この変数は値が変更されない」ということが明確になるためです。

参考資料

よくある質問

Q1: varだけでプログラムを書いてもいいですか?

A1: 技術的には可能ですが、 **val** を積極的に使うことで、コードの安全性と可読性が向上するため、推奨されていません。値が変更されないことが明確な場合は、積極的に **val** を使用しましょう。

Q2: valで宣言した変数に後から値を代入することはできますか?

A2: いいえ、できません。 **val** は再代入不可の変数を宣言するため、一度値を代入すると、その後は変更できません。

Q3: valとvarのどちらを使えば良いか迷う場合は?

A3: 基本的には、値が変更される場合は **var** を、そうでない場合は **val** を使用します。迷う場合は、**val** を使用してみて、エラーが発生する場合に **var** に変更することを検討しましょう。

その他の参考記事:jquery value 取得