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フィードバックを取得できます。ローカル設定は不要です。