Kotlin Academy · レッスン

Nullable型とNon-Null型

型システムの基礎を学びます

レッスン 1/413 ステップ

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

Null Safetyが重要な理由

悪名高いNullPointerExceptionは、これまでに数え切れないほどのプログラムをクラッシュさせてきました。Kotlinは、型システムの一部としてnull許容性を扱うことで、この問題に正面から取り組みます。

Kotlinでは、値がnullになり得るかどうかをコンパイラーが把握しており、問題が発生する前にその可能性を処理するよう求められます。

非null型

Kotlinでは、デフォルトですべての型が非nullです。String型の変数にnullを格納することはできません。

この保証はコンパイル時に適用されるため、チェックなしで値を安全に使用できます。

fun main() {
    val name: String = "Alice"
    println(name.length)
}

nullの代入は拒否される

非null型にnullを代入しようとすると、コンパイラーによって直ちに拒否されます。

下の行は、Stringがnullを受け付けないためコンパイルに失敗します。

  • val name: String = null → エラー
fun main() {
    val city: String = "Paris"
    // val broken: String = null // compile error
    println(city)
}

Nullable型

nullを許可するには、型の後に疑問符を付けてString?と記述します。

これはNullable型です。実際の値またはnullのいずれかを保持できます。

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

Nullable型と非null型

2つの宣言はほとんど同じに見えますが、動作は大きく異なります。

  • val a: String → nullにはならない
  • val b: String? → nullになる可能性がある

1つの?によって、変数の契約全体が変わります。

fun main() {
    val a: String = "hi"
    val b: String? = "hi"
    println(a)
    println(b)
}

コンパイラーがNullable型へのアクセスを保護する

Nullable型の値に対して、メソッドを直接呼び出すことはできません。値がnullである可能性があるため、コンパイラーが拒否します。

下にコメントアウトされている行はコンパイルできません。

  • String?型のmaybeに対するmaybe.length → エラー
fun main() {
    val maybe: String? = "text"
    // println(maybe.length) // compile error
    println(maybe)
}

nullのチェック

Nullable型の値を使用する簡単な方法の1つは、明示的なifチェックです。

ifブロック内では、Kotlinは値がnullではないことを認識しているため、安全に使用できます。

fun main() {
    val maybe: String? = "hello"
    if (maybe != null) {
        println(maybe.length)
    }
}

関数パラメーターのnull

パラメーターの型にも同じルールが適用されます。String型のパラメーターには実際の値を渡す必要がありますが、String?型はnullを受け付けます。

これにより、関数シグネチャを見るだけで受け付ける値がわかります。

fun greet(name: String?) {
    if (name != null) {
        println("Hello, " + name)
    } else {
        println("Hello, guest")
    }
}

fun main() {
    greet("Mia")
    greet(null)
}

Nullable型の戻り値

関数はNullable型を返すことで、結果が存在しない可能性を表現できます。

その場合、呼び出し側は結果を使用する前に、nullの可能性を処理する必要があります。

fun firstChar(text: String?): Char? {
    if (text == null || text.isEmpty()) return null
    return text[0]
}

fun main() {
    println(firstChar("Kotlin"))
    println(firstChar(null))
}

デフォルトの型推論

リテラルを代入すると、Kotlinは非null型を自動的に推論します。

  • val n = "text" → Stringと推論されます

Nullable型にするには、?を付けて型を明示的に宣言する必要があります。

fun main() {
    val n = "text" // inferred String (non-null)
    val m: String? = "text" // explicit nullable
    println(n.length)
    println(m)
}

全体の整理

型システムは値を2つの明確なグループに分けます。

  • 非null:常に安全に使用できます
  • Nullable:使用する前に処理する必要があります

この区別により、nullに関するバグが実行時のクラッシュではなくコンパイル時エラーになります。

fun main() {
    val safe: String = "always here"
    val risky: String? = null
    println(safe.uppercase())
    if (risky != null) println(risky.uppercase()) else println("no value")
}

クイックチェック

Nullable型と非null型についての理解を確認しましょう。

まとめ

Kotlinのnull安全性の基礎を学びました。

  • デフォルトではすべての型が非nullです
  • ?を付けるとNullable型になります
  • コンパイラーは、Nullable型の値への安全でないアクセスを阻止します
  • if (x != null)でチェックすると、値を安全に使用できます

次は、Nullable型を簡単に扱える簡潔な演算子について学びます。

無料で開始

AI チューターと学ぶ Kotlin — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「Nullable型とNon-Null型」レッスンは無料ですか?

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

「Nullable型とNon-Null型」で何を学びますか?

型システムの基礎を学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

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

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

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

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

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

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