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 取得