Kotlinの変数宣言について

採用はこちら

Kotlinの変数宣言は、安全性・可読性・バグの予防を重視して設計されています。

Java経験者には一見シンプルに見えますが、「val / var」「null安全」「初期化ルール」など、思想レベルでの違いを理解することが重要です。

以下では 基礎 → 実務で重要な仕様 → 注意点 の順で解説します。

目次

Kotlinの変数宣言の基本構文

Kotlinの変数宣言は、必ず val または var から始まります。

val name: String = "Kotlin"
var age: Int = 25

基本構文は次の通りです。

val / var 変数名: 型 = 初期値
  • 型は省略可能(型推論あり)
  • 初期値は「使用前に必ず代入」されている必要があります

val と var の正確な違い

val(再代入不可)

val count = 10
// count = 20 // コンパイルエラー

val変数への再代入ができません

これは「値が不変」という意味ではなく、参照が固定されるという意味です。

val list = mutableListOf(1, 2, 3)
list.add(4) // OK(中身は変更可能)
  • val = 参照の再代入不可
  • オブジェクト自体のミュータビリティとは別概念

var(再代入可能)

var count = 10
count = 20 // OK

状態が変化する必要がある場合のみ使用します。

実務での基本指針

「原則 val、必要なときだけ var」

これはKotlin開発における標準的な考え方です。

型推論(型を省略できる理由)

Kotlinは強力な型推論を持っています。

val message = "Hello"   // String
val number = 100       // Int
val rate = 1.5         // Double

コンパイラが自動的に型を決定します。

型を明示するべき場面

val price: Long = 100
  • 数値型を意図的に指定したいとき
  • APIや公開コードで可読性を高めたい場合
  • 初期値が null の場合(型推論できない)

初期化ルール(ローカル変数とプロパティの違い)

ローカル変数(関数内)

  • 使用前に必ず代入されていればOK
  • val は1回だけ代入可能
val result: Int
result = 10
println(result) // OK

クラスのプロパティ

クラスプロパティは、インスタンス生成までに必ず初期化される必要があります

  • 宣言時に初期化
  • コンストラクタで受け取る
  • init ブロックで初期化

lateinit と by lazy(遅延初期化)

lateinit(var専用)

lateinit var userName: String

使用条件

  • var であること
  • 非null型であること
  • プリミティブ型ではないこと
lateinit var age: Int // NG

by lazy(val専用)

val config by lazy {
    loadConfig()
}
  • 初回アクセス時に初期化
  • スレッドセーフな実装が標準

null安全と変数宣言(Kotlin最大の特徴)

Kotlinでは nullはデフォルトで許可されません

val text: String = "Hello"
// text = null // エラー

nullを許可する場合

val text: String? = null

? を付けた型のみ null を代入できます。

null安全演算子

安全呼び出し ?.

val length = text?.length

エルビス演算子 ?:

val length = text?.length ?: 0

非null断言 !!(非推奨)

val length = text!!.length

nullの場合は即クラッシュするため、原則使いません。

const val(コンパイル時定数)

const val MAX_COUNT = 100

使用条件

  • トップレベル
  • object 内
  • companion object 内
class Api {
    companion object {
        const val BASE_URL = "https://example.com"
    }
}
  • コンパイル時に値が確定できる型のみ使用可能

複数の変数宣言について

Kotlinではセミコロンを使えば同一行に複数文を書けます。

val a = 1; val b = 2

ただし、可読性の観点から分けて書くのが一般的です。

Javaとの違い

JavaKotlin
int a = 10;val a = 10
final int a = 10;val a = 10
String s = null;❌ 不可
String? s = null

Kotlinは null安全を言語レベルで強制する点が大きな違いです。

ただし Java 相互運用では null が混入する可能性があるため、実務では防御的な扱いが必要です。

まとめ

  • val再代入不可(参照固定)
  • 基本は val、状態が変わる場合のみ var
  • null は明示的に許可しない限り使えない
  • lateinit / by lazy は用途が異なる
  • Kotlinは 事故を減らす設計思想の言語

以上、Kotlinの変数宣言についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次