Kotlin変数宣言
変数宣言
基本的に変数は次のように宣言する。
val(またはvar) 変数名: 型 = 値
変数宣言には、不変変数と可変変数の2種類がある。
可変変数(var)
varで宣言すると、変数に再代入できる。つまり、可変(Mutable、変更できる)変数になる。varはvariableを意味する。
var a: Int = 1
var b = 2
var c: Int
c = 3
宣言時に初期値を指定した場合、変数の型を省略できる型推論(type inference)機能も提供される。
不変変数(val)
valで宣言すると、変数に再代入できない。つまり、不変(Immutable、変更できない)変数になる。valはvalueを意味する。
val MAX_COUNT: Int = 1024
val MAX_SIZE = 1024
valキーワードを使用した変数は、文脈上1回だけ初期化できる。Javaのfinalに似ている。
var、valのコンパイル
varはいつでもどこでも代入できるが、valで宣言すると再代入時にコンパイルエラーが発生する。
var foo = "a"
hoge = "b" // OK
val foo = "a"
fuga = "b" // コンパイルエラー
代入を何度も繰り返すのは望ましくないため、基本的にはvalを使うようにする。
もちろん、varを使わなければならない場合もある。
定数宣言(const)
constで宣言すると、より効率的な定数を宣言できる。
const val FOO = "Foo"
変数のデータ型
VariableTutorial.kt
fun main(args: Array<String>) {
val a: Int
var b: String
val c = 3;
var d = "dString"
a = 34
b = "bString"
println("a = $a is Int? ${a is Int}")
println("b = $b is String? ${b is String}")
println("c = $c is Int? ${c is Int}")
println("d = $d is String ${d is String}")
}
a = 34 is Int? true
b = bString is String? true
c = 3 is Int? true
d = dString is String true
Javaとは異なり、intやStringのようなデータ型を書かず、varまたはvalだけを明示してもよい。
注意すべき点は、変数宣言だけをする場合はvar a: Int, val b: Stringのようにデータ型を必ず明示する必要があるが、変数を宣言して値を定義する場合は、var a = 34のようにデータ型が自動で指定されるため省略できることである。これを型推論(type inference)という。
Null非許容変数、Null許容変数
nullは値が存在しないことを意味する。通常の変数にはnullを代入できない。型名に疑問符(?)を付けると、nullを許可する変数(Nullableパラメーター)を定義できる。
var a: String = null // nullは代入できない
var b: String? = null // nullを代入できる
Nullable変数は、そのままではプロパティや関数を呼び出せない。
fun main() {
var a: String? = "ABC"
var b: String? = "ABC"
var c: String? = "ABC"
var d: String? = "ABC"
// nullではないことを確認するif文の中ではNon-nullableとして扱われる(スマートキャスト)
if (a != null) { println(a.length) }
// ?.を使うと、bがnullの場合は式全体がnullになる(セーフコール)
println(b?.length)
// !!を使うと強制的に使用できる(実行時エラーが発生する可能性があるため危険)
println(c!!.length)
// Elvis演算子(?:)を使用してnullにならないようにする。
d = d ?: "(Unknown)"
println(d.length)
}