0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Kotlin 】 Kotlin 型システム( Null許容型・スマートキャスト・プラットフォーム型)

Posted at

はじめに

Kotlin の型システムは Null 安全性 を重視して設計されており、Java の代表的なエラーである NullPointerException (NPE) を大幅に防げます。
この記事では次の内容を解説します:

  • Null許容型と null 安全機構
  • ? / !! / 安全呼び出し ?. / Elvis 演算子 ?:
  • スマートキャスト (is / as)
  • プラットフォーム型

1. Null許容型と null 安全

Kotlin では 型ごとに null 許容かどうか を区別します。

val a: String = "Hello"
// a = null      // ❌ コンパイルエラー

val b: String? = null  // ✅ nullを代入可能

String非null型String?null許容型


2. Null 安全の演算子

(1) ? : null許容型の宣言

val s: String? = "Kotlin"

(2) !! : 強制アンラップ

  • nullの可能性があっても「絶対にnullじゃない」と保証する場合に使う
  • 実行時にnullなら NullPointerException が発生
val s: String? = null
val length = s!!.length  // ❌ 実行時にNPE

(3) 安全呼び出し ?.

  • nullの場合は処理をスキップして null を返す
val s: String? = "Kotlin"
println(s?.length)  // 6

val t: String? = null
println(t?.length)  // null

(4) Elvis 演算子 ?:

  • 左辺がnullなら右辺を返す
val s: String? = null
val length = s?.length ?: 0
println(length) // 0

3. スマートキャスト(Smart Cast)

Kotlin では is チェックのあと自動で型がキャストされます。

fun printLength(obj: Any) {
    if (obj is String) {
        // この中では obj は String として扱える
        println(obj.length)
    }
}

is の否定 !is も利用可能。


4. 型キャスト as

  • 明示的にキャストする場合は as を使う
  • 安全にキャストする場合は as? を使い、失敗時に null を返す
val obj: Any = "Hello"

val str: String = obj as String
val num: Int? = obj as? Int   // 失敗して null

5. プラットフォーム型

Java との相互運用時、Kotlin コンパイラは null安全性の情報を持たない型 を「プラットフォーム型」として扱います。

// Javaメソッド: String getName()
val name = javaObject.name  // String! という型(非nullか不明)
  • String! はKotlinコード上では String とも String? とも扱える曖昧な型
  • 呼び出し側が責任を持って null 安全を保証する必要がある

まとめ

  • Null許容型: String? として宣言
  • 演算子:
    • !! → 強制アンラップ(危険)
    • ?. → 安全呼び出し
    • ?: → Elvis 演算子(デフォルト値)
  • スマートキャスト: is で型チェック後に自動キャスト
  • 型キャスト: as(強制)、as?(安全)
  • プラットフォーム型: Java からの呼び出し時に null 安全が不明な型

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?