Kotlinでの変数の宣言

varによる変数の宣言

varキーワードを用いて変数を宣言することができます。varキーワードを用いた変数の宣言は、以下の構文で行います。

var string: String

ここでStringは、変数の型を表します。変数名の後に:を置き、半角スペースを開けて型を指定します。:の後の半角スペースは無くても動作に問題ありませんが、ここに半角スペースを置くのが普通です。

変数の代入

宣言した変数への値の代入は、以下の構文で行います。

string = "string"

ここで重要なのは、変数stringはString型で宣言されているため、String型以外の値を代入しようとするとコンパイルエラーとなることです。例えば、以下のコードではString型で宣言された変数stringにInt型の値を代入しようとしているため、コンパイルエラーとなります。

string = 0

変数の宣言時に代入

変数の宣言と同時に代入することも可能です。

var string: String = "string"

むしろ変数の宣言と同時に値を代入することのが普通です。

型推論

上記の構文を用いて変数の宣言時に値を代入する場合、値の型から変数の型を推論することが可能です(型推論)。この場合、変数の宣言から型の記述を省略することが可能です。

var string = "string"

型推論を用いない構文は型推論を用いた構文と比べて冗長であるため、右辺から容易に型を識別できる場合は積極的に型の記述を省略します。右辺から容易に型を識別できない場合は、一見して型を識別できるよう、冗長になっても型の記述を行う場合があります。型の記述の有無については、ケースバイケースで判断します。

再代入

varキーワードで宣言した変数は再代入可能です。すなわち、一度値を代入した後に、再度別の値を代入することが可能ということです。以下のコードでは、trueOrFalse()が返す結果に応じて、Int型の変数intに10または20を再代入しています。

var int: Int
if (trueOrFalse()) {
    int = 10
} else {
    int = 20
}

変数がvarで宣言されている場合、コード内のどこで変数が変更されているかをプログラマーが追わなければならず、思わぬバグを生み出してしまう場合があります。そのため、次に示すvalを用いて、再代入のできない変数を宣言する方が安全なコードとなります。

valによる変数の宣言

再代入を許すvarキーワードによる変数の宣言に対して、valキーワードによる変数の宣言では再代入を許しません。そのため、valキーワードを用いて変数を宣言した方が安全なコードとなります。valキーワードによる変数の宣言は、以下の構文で行います。varキーワードによる変数の宣言と同様です。

val string = "string"

再代入の項で示したコードは、valを用いて以下のように改善することができます。Kotlinのifは値を返す式であるため、このように書くことができます。

val int = if (trueOrFalse()) { 10 } else { 20 }

if式やwhen式などを用いて、変数をvarではなくvalで宣言することで、より安全なコードとなります。

筆者

茨城県つくば市在住のソフトウェアエンジニアです。得意領域はAndroidとFlutterです。「Jetpack ComposeによるAndroid MVVMアーキテクチャ入門」の著者です。

👉もっと詳しく