0Pricing
Android Academy · レッスン

Nullable型とNon-Null型

?型マーカーを学びます。

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

Null安全が重要な理由

Androidアプリのクラッシュの多くは、実際には存在しない値を使うという1つのミスが原因です。他の言語では、実行時に恐ろしいNullPointerExceptionが発生します。

Kotlinでは、これをコンパイル時に防ぎます。型システムが、どの値が null になり得るか、またどの値が決してならないかを追跡します。このレッスンでは、その仕組みの基礎を学びます。

非null型

Kotlinの型は、デフォルトでは null を保持できません。String は常に実際の文字列を参照します。

null を代入しようとすると、コードはコンパイルすらできません。これが安全なデフォルト設定です。

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

nullは拒否される

非null型に null を入れようとするとどうなるか確認しましょう。

コンパイラーがすぐに処理を止めます。隠れたバグを抱えたまま実行時まで進むことはありません。

val name: String = null  // Compile error:
// Null can not be a value of a non-null type String

?を使ったNullable型

ユーザーの任意のミドルネームのように、値が実際に存在しない可能性がある場合もあります。その場合は、型に ? を追加して明示的に許可します。

String? は実際の文字列または null を保持できます。疑問符によって、型がNullableであることを示します。

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

2つの異なる型

String と String? は同じ型ではありません。後者は null を含む、より広い型です。

この違いによって、コンパイラーがコードを保護できます。null が現れる可能性のある場所を正確に把握できるためです。

val sure: String = "hello"
val maybe: String? = "hello"
// maybe could later be null; sure never can

Nullable型は直接使えない

コンパイラーは、Nullableな値を最初に確認せずにメソッドを呼び出すことを許可しません。

middleName は null の可能性があるため、そこに対して .length を呼び出すとコンパイルエラーになります。nullの場合を処理する必要があります。

val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowed

ifで確認する

Nullableな値を使う最も簡単な方法は、if 条件で確認することです。

nullではないことを確認した分岐の中では、Kotlinが非null型にスマートキャストするため、.length を使えます。

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

スマートキャスト

nullではないことを確認すると、コンパイラーはそのブロックの残りの部分で値がnullではないことを記憶します。これをスマートキャストと呼びます。

自分で変換を書く必要はありません。Kotlinが自動的に追跡してくれます。

fun describe(s: String?) {
    if (s == null) return
    // s is now treated as String here
    println("Length is " + s.length)
}

関数のパラメーター

パラメーターがNullableかどうかは、関数の契約の一部です。非nullパラメーターは、呼び出し側に対して null を決して受け取らないことを保証します。

Nullableパラメーターは、入力が存在しない可能性を想定し、処理することを示します。

fun greet(name: String) {
    println("Hi, " + name)
}
// greet(null) would not compile

戻り値の型もNullableにできる

関数は、何も見つからなかったことを示すために null を返せます。戻り値の型に ? を付けて示します。

これにより呼び出し側は、結果を使う前に確認が必要だと分かります。

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

デフォルトは非nullにする

よい原則は、非null型を優先することです。値が本当に存在しない可能性がある場合だけ ? を追加します。

これにより、コードの意図を正確に保てます。Nullable型が少ないほど、後で必要になるnullチェックも少なくなります。

// Prefer this:
val score: Int = 0
// Over this, unless null is meaningful:
val maybeScore: Int? = null

クイックチェック

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

まとめ

Kotlinの型はデフォルトで非nullであり、コンパイル時に null を拒否します。値が存在しない可能性がある場合は、型に ? を追加してNullableにします。

Nullableな値は直接使えません。nullチェックを行うと非nullにスマートキャストされ、安全に使えるようになります。次は、Nullableな値をより短く処理する方法を学びます。

よくある質問

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

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

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

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

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

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

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

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

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

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

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

  1. Nullable型とNon-Null型
  2. 安全呼び出しとElvis
  3. let、also、スコープ関数
  4. NullPointerExceptionを防ぐ
← Android Academyに戻る