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 canNullable型は直接使えない
コンパイラーは、Nullableな値を最初に確認せずにメソッドを呼び出すことを許可しません。
middleName は null の可能性があるため、そこに対して .length を呼び出すとコンパイルエラーになります。nullの場合を処理する必要があります。
val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowedifで確認する
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Nullable型とNon-Null型
- 安全呼び出しとElvis
- let、also、スコープ関数
- NullPointerExceptionを防ぐ