変数(variable)とは、プログラムの中でデータを記憶しておくために、データに名前を付けたものです。
Kotlinでは、変数を宣言するのに使用するキーワードが2つあります。val と var です。
val:再代入不可(読み取り専用)の value
リテラルに名前を付けて変数と結びつけることを代入(assignment)と言います。
参考
リテラルについては、「リテラルと基本データ型」を参照
変数にリテラルを代入するためには、キーワード val を使います。
val は、一度変数に代入すると、再代入はできません。そのため「読み取り専用」となります。
書式
val 変数名: 型 = 式
リテラルを変数に代入すると、その変数を使って元のリテラルを参照できます。
Kotlin
fun main() {
val v1: Int = 123
val s1: String = "Hello"
println("v1 = $v1")
println("s1 = $s1")
}
実行結果
v1 = 123
s1 = Hello
代入するリテラルと変数の型が不適合である場合は、コンパイルに失敗します。
Kotlin
val s1: Long = "Hello"
実行結果
error: Type mismatch: inferred type is String but Long was expected
var:再代入可能な変数の定義 variable
一度、変数に代入した後、別の値を同じ変数へ代入したい場合があります。
その場合は、キーワード val の代わりに var を使用します。
Kotlin
fun main() {
var v1: Int = 5
v1 = 3
println("v1 = $v1")
}
実行結果
v1 = 3
おまけ:型推論
Kotlin は静的型付け言語(Statically Typed Language)です。
そのため、コンパイル時に変数の型が分からないといけません。
しかし、「val name: String = "Sanachan"」のような変数定義に、型を指定するのは冗長に思えます。
"Sanachan"というリテラルから、明示的に String と書いていなくても、
変数 name の型は String になるだろうと推論することができるからです。
Kotlin コンパイラも、型推論を行います。
これにより、「val name = "Sanachan"」と記述するだけで変数を定義することができます。
Kotlin
fun main() {
var name = "Sanachan"
println("name=$name, type=${name::class.qualifiedName}")
}
実行結果
name=Sanachan, type=kotlin.String