0Pricing
Android Academy · レッスン

Null安全

KotlinのNull安全システム(nullable型、安全呼び出し演算子、Elvis演算子)を理解し、NullPointerExceptionを排除する方法を学びます。

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

10億ドルの過ち

Javaでは、どの変数もnullになる可能性があり、実行時にNullPointerException(NPE)が発生します。これはAndroidアプリで最もよくあるクラッシュの1つです。

nullを考案したTony Hoareは、これを10億ドルの過ちと呼びました。

Kotlinは、null安全性の仕組みによって、コンパイル時にNPEを排除します。

null許容型と非null許容型

Kotlinでは、型はデフォルトでnull非許容です。nullを許可するには、型に?を追加します。

  • String — 決してnullにならないことが保証されます
  • String? — nullになる可能性があります

コンパイラーがこれを強制するため、null非許容型にnullを代入することはできません。

null許容型の例

コンパイラーは、アプリの実行前にnullに関する誤りを検出します。

fun main() {
    val name: String = "Alice"   // never null
    // name = null  // COMPILE ERROR

    var nickname: String? = "Al"  // nullable
    nickname = null               // OK

    println(name)
    println(nickname)  // null
}

安全呼び出し演算子?.

安全呼び出し演算子の?.は、オブジェクトがnullでない場合にのみメソッドを呼び出します。nullの場合はクラッシュせず、nullを返します。

nickname?.length → nicknameがnullでなければ長さを返し、nullならnullを返します。

安全呼び出しの実践

?.を使って、null許容プロパティに安全にアクセスします。

fun main() {
    var text: String? = "Hello"
    println(text?.length)   // 5
    println(text?.uppercase()) // HELLO

    text = null
    println(text?.length)   // null (no crash!)
    println(text?.uppercase()) // null
}

エルビス演算子?:

エルビス演算子の?:は、式がnullの場合にデフォルト値を指定します。

val len = text?.length ?: 0

これは「textの長さ。ただしtextがnullなら0」と読みます。

髪型が?:に似ているエルビス絵文字🕺にちなんだ名前です。

エルビス演算子の例

?:を使って安全なデフォルト値を指定します。

fun main() {
    var name: String? = "Bob"
    println(name?.length ?: 0)  // 3

    name = null
    println(name?.length ?: 0)  // 0

    val display = name ?: "Anonymous"
    println(display)  // Anonymous
}

ifによるnullチェック

if (x != null)ブロック内では、Kotlinがnull許容型を自動的に非null許容型へスマートキャストします。ブロック内で?.を使う必要はありません。

スマートキャストの例

Kotlinはnullチェックの後で型を絞り込みます。

fun printLength(text: String?) {
    if (text != null) {
        // 'text' is now String (non-nullable) here
        println("Length: ${text.length}") // no ?. needed
    } else {
        println("text is null")
    }
}

fun main() {
    printLength("Kotlin")  // Length: 6
    printLength(null)       // text is null
}

クイックチェック

null?.length ?: -1は何と評価されますか?

まとめ:null安全性

Kotlinのnull安全性の仕組みはNPEを排除します。

  • 型はデフォルトでnull非許容です。nullを許可するには?を追加します
  • ?.安全呼び出し — クラッシュせずnullを返します
  • ?:エルビス演算子 — nullの場合のデフォルト値を指定します
  • if (x != null)ブロック内ではスマートキャストが行われます

次は、クラスとオブジェクトでコードを構造化します。

よくある質問

「Null安全」レッスンは無料ですか?

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

「Null安全」で何を学びますか?

KotlinのNull安全システム(nullable型、安全呼び出し演算子、Elvis演算子)を理解し、NullPointerExceptionを排除する方法を学びます。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Null安全」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Null安全
  2. クラスとオブジェクト
  3. データクラスとsealedクラス
  4. 拡張関数と高階関数
← Android Academyに戻る