0Pricing
Kotlin Academy · レッスン

Nullable型と?修飾子

Nullable変数を宣言し、コンパイル時に機能するKotlinのnull安全性を理解します。

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

Kotlin の null 安全性

Kotlin では、null を保持できる型と保持できない型をコンパイル時に区別します。コンパイラーは、実行前にほとんどの NullPointerException を防ぎます。

非 null 型

Kotlin の型は、デフォルトでは null にできません。null を代入しようとすると、コンパイラーが拒否します。

fun main() {
    val name: String = "Ada"
    // val nope: String = null // ERROR
    println(name)
}

? による nullable 型

? を付けると null を許可できます。するとコンパイラーは、その変数を値が存在しない可能性のあるものとして扱います。

fun main() {
    val name: String? = null
    println(name) // null
}

nullable 値のメソッド呼び出し

null のケースを先に処理しない限り、nullable な値に対してメソッドを直接呼び出すことはできません。コンパイラーが拒否します。

fun main() {
    val name: String? = "Bob"
    // println(name.length) // ERROR — name might be null
    if (name != null) println(name.length) // smart cast
}

スマートキャスト

if (x != null) で確認した後、その分岐内では Kotlin が x を非 null 型にスマートキャストします。

fun main() {
    val name: String? = "Alice"
    if (name != null) {
        println("Length: ${name.length}") // safe, smart-cast
    } else {
        println("No name")
    }
}

nullable な関数パラメーター

値が渡されない可能性がある場合は、関数パラメーターを nullable として指定します。呼び出し側は値または null を明示的に渡す必要があります。

fun greet(name: String?) {
    if (name == null) println("Hello, stranger")
    else println("Hello, $name")
}
fun main() {
    greet("Sara")
    greet(null)
}

nullable な戻り値の型

X? を返す関数は、null を返す可能性があることを呼び出し側に伝えます。呼び出し側ではその可能性を処理する必要があります。

fun findUser(id: Int): String? {
    return if (id == 1) "Alice" else null
}
fun main() {
    val u = findUser(2)
    println(u ?: "no user")
}

nullable なプロパティ

クラスのプロパティも nullable にできます。後から値が設定されるフィールドや、任意で取得されるフィールドでよく使われます。

data class Profile(
    val name: String,
    val avatarUrl: String?
)
fun main() {
    val p = Profile("Lee", null)
    println(p.avatarUrl ?: "(no avatar)")
}

nullable なコレクション

nullable なリスト List<T>? と、nullable な要素のリスト List<T?> を区別してください。これらは異なる意味を持ちます。

fun main() {
    val maybeList: List<Int>? = null
    val listOfMaybe: List<Int?> = listOf(1, null, 3)
    println(maybeList?.size)     // null
    println(listOfMaybe.size)    // 3
}

Java との比較

Java から Kotlin に渡される型は、プラットフォーム型(String!)として扱われます。Kotlin はその値を信頼しますが、null 安全性は提供しません。可能な場合は、Java API に @Nullable/@NotNull を常に付けてください。

fun main() {
    val maybeNull: String? = System.getenv("FOO") // null if unset
    println("env FOO = ${maybeNull ?: "(unset)"}")
}

重要な理由

コンパイル時の null 安全性により、実行時クラッシュの一種を丸ごと防げます。? 修飾子を活用してください。意図が文書化され、処理が強制されます。

fun divide(a: Int, b: Int): Int? = if (b == 0) null else a / b
fun main() {
    val r1 = divide(10, 2) // 5
    val r2 = divide(10, 0) // null — handled at call site
    println("$r1, $r2")
}

簡単な確認

型宣言の末尾にある ? は何を意味しますか?

まとめ

Kotlin の型は、デフォルトでは nullable ではありません。? を付けると null を許可できます。コンパイラーは、スマートキャスト、セーフコール、Elvis 演算子によって null の処理を強制し、実行前にほとんどの NullPointerException を防ぎます。

よくある質問

「Nullable型と?修飾子」レッスンは無料ですか?

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

「Nullable型と?修飾子」で何を学びますか?

Nullable変数を宣言し、コンパイル時に機能するKotlinのnull安全性を理解します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Nullable型と?修飾子」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Nullable型と?修飾子
  2. 実際のコードで使う安全呼び出し?.とElvis ?:
  3. Nullableレシーバーで使うlet、also、run
  4. !!演算子:避けるべき場面と理由
← Kotlin Academyに戻る