0Pricing
Kotlin Academy · レッスン

プラットフォーム型

Java由来のNull許容性を学びます

「プラットフォーム型」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

KotlinとJavaの関係

KotlinはJVM上で動作し、Javaコードを常に呼び出します。しかし、Javaにはnull許容型とnull非許容型という概念がありません。

では、KotlinはJavaから渡される値をどのように扱うのでしょうか。それを可能にするのがプラットフォーム型です。

プラットフォーム型とは

プラットフォーム型とは、null許容性が不明な状態でKotlinがJavaから受け取る型です。

Kotlinはエラーメッセージ内でこれを String! と表します。感嘆符は、nullかもしれないしnullではないかもしれず、Kotlinはどちらかを強制しないという意味です。

緩和されたチェック

プラットフォーム型に対して、Kotlinはnullチェックを緩和します。コンパイルエラーなしで、値をnull非許容として扱えます。

その代わり、実際にnullだった場合は実行時にNullPointerExceptionが発生します。

型は自分で選ぶ

プラットフォーム型の値を格納するときは、どのような型として扱うかを自分で決めます。

  • null非許容の String として → 便利ですが危険です
  • null許容の String? として → 安全で明示的です

このKotlinの例では、その選択をシミュレートしています。

fun fromJava(): String? = "value from Java"

fun main() {
    val safe: String? = fromJava()
    println(safe?.length)
}

危険な選択

null非許容だと仮定しているときに、元の値がnullを返すと、代入時または最初の使用時にクラッシュします。

これがプラットフォーム型に潜む危険です。

fun fromJava(): String? = null

fun main() {
    try {
        val risky: String = fromJava()!!
        println(risky.length)
    } catch (e: NullPointerException) {
        println("Null came from the Java side")
    }
}

アノテーションによる支援

Javaライブラリでは、@Nullable や @NotNull のようなアノテーションを使用できます。

これらが付いている場合、Kotlinはその情報を尊重し、プラットフォーム型ではなく適切な String? または String を提供します。

ベストプラクティス: null許容として扱う

アノテーションのないJavaコードを呼び出すときは、結果をnull許容として扱うのが安全な習慣です。

変数の型に ? を付け、Kotlinの他のnull許容値と同じようにセーフコールを使ってください。

fun fromJava(): String? = "data"

fun main() {
    val value: String? = fromJava()
    val length = value?.length ?: 0
    println(length)
}

境界で防御する

Javaとの境界は信頼できないものとして扱ってください。値がKotlinコードに入る箇所で、検証するかデフォルト値を設定します。

その後は、コードの残りの部分で安全なKotlinの型を扱えるようになります。

fun fromJava(): String? = null

fun main() {
    val name = fromJava() ?: "default"
    // from here on, name is a clean non-null String
    println(name.uppercase())
}

Kotlinがこれを許す理由

KotlinはJavaからのすべての値をnull許容にすることもできますが、そうするとJavaとの相互運用が非常に冗長になります。

プラットフォーム型は、利便性と厳密さを選べることを両立した、現実的な妥協案です。

プラットフォーム型の見分け方

自分で String! と書くことはありません。Javaから取得した値にマウスカーソルを合わせたとき、IDEのヒントやエラーメッセージにだけ表示されます。

! が表示されたら、null許容性を意識的に決める合図です。

まとめて確認

プラットフォーム型はJavaとKotlinの橋渡しをします。

  • null許容性が不明で、Type! と表示されます
  • Kotlinではnull許容型かnull非許容型かを選べます
  • 安全を保つため、分からない場合はnull許容として扱います
  • アノテーションによって推測が不要になります
fun fromJava(): String? = "safe value"

fun main() {
    val value: String? = fromJava()
    println(value?.uppercase() ?: "missing")
}

理解度チェック

プラットフォーム型の理解度を確認しましょう。

まとめ

Javaとの境界を越えてnull許容性がどのように扱われるかを学びました。

  • プラットフォーム型はnull許容性が不明です
  • Kotlinはチェックを緩和しますが、誤った前提は実行時NPEの原因になります
  • 境界ではnull許容として扱い、デフォルト値を設定します
  • Javaのアノテーションによって適切な型が復元されます

これでNull Safetyの詳細解説は完了です。

よくある質問

「プラットフォーム型」レッスンは無料ですか?

はい。「プラットフォーム型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「プラットフォーム型」で何を学びますか?

Java由来のNull許容性を学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「プラットフォーム型」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Nullable型とNon-Null型
  2. 安全呼び出しとElvis
  3. !!演算子
  4. プラットフォーム型
← Kotlin Academyに戻る