Nullable型と?修飾子
Nullable変数を宣言し、コンパイル時に機能するKotlinのnull安全性を理解します。
「Nullable型と?修飾子」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
Kotlin の null 安全性
Kotlin では、null を保持できる型と保持できない型をコンパイル時に区別します。コンパイラーは、実行前にほとんどの NullPointerException を防ぎます。
非 null 型
Kotlin の型は、デフォルトでは null にできません。null を代入しようとすると、コンパイラーが拒否します。
fun main() {
val name: String = "Ada"
// val nope: String = null // ERROR
println(name)
}? による nullable 型
? を付けると null を許可できます。するとコンパイラーは、その変数を値が存在しない可能性のあるものとして扱います。
fun main() {
val name: String? = null
println(name) // null
}nullable 値のメソッド呼び出し
null のケースを先に処理しない限り、nullable な値に対してメソッドを直接呼び出すことはできません。コンパイラーが拒否します。
fun main() {
val name: String? = "Bob"
// println(name.length) // ERROR — name might be null
if (name != null) println(name.length) // smart cast
}スマートキャスト
if (x != null) で確認した後、その分岐内では Kotlin が x を非 null 型にスマートキャストします。
fun main() {
val name: String? = "Alice"
if (name != null) {
println("Length: ${name.length}") // safe, smart-cast
} else {
println("No name")
}
}nullable な関数パラメーター
値が渡されない可能性がある場合は、関数パラメーターを nullable として指定します。呼び出し側は値または null を明示的に渡す必要があります。
fun greet(name: String?) {
if (name == null) println("Hello, stranger")
else println("Hello, $name")
}
fun main() {
greet("Sara")
greet(null)
}nullable な戻り値の型
X? を返す関数は、null を返す可能性があることを呼び出し側に伝えます。呼び出し側ではその可能性を処理する必要があります。
fun findUser(id: Int): String? {
return if (id == 1) "Alice" else null
}
fun main() {
val u = findUser(2)
println(u ?: "no user")
}nullable なプロパティ
クラスのプロパティも nullable にできます。後から値が設定されるフィールドや、任意で取得されるフィールドでよく使われます。
data class Profile(
val name: String,
val avatarUrl: String?
)
fun main() {
val p = Profile("Lee", null)
println(p.avatarUrl ?: "(no avatar)")
}nullable なコレクション
nullable なリスト List<T>? と、nullable な要素のリスト List<T?> を区別してください。これらは異なる意味を持ちます。
fun main() {
val maybeList: List<Int>? = null
val listOfMaybe: List<Int?> = listOf(1, null, 3)
println(maybeList?.size) // null
println(listOfMaybe.size) // 3
}Java との比較
Java から Kotlin に渡される型は、プラットフォーム型(String!)として扱われます。Kotlin はその値を信頼しますが、null 安全性は提供しません。可能な場合は、Java API に @Nullable/@NotNull を常に付けてください。
fun main() {
val maybeNull: String? = System.getenv("FOO") // null if unset
println("env FOO = ${maybeNull ?: "(unset)"}")
}重要な理由
コンパイル時の null 安全性により、実行時クラッシュの一種を丸ごと防げます。? 修飾子を活用してください。意図が文書化され、処理が強制されます。
fun divide(a: Int, b: Int): Int? = if (b == 0) null else a / b
fun main() {
val r1 = divide(10, 2) // 5
val r2 = divide(10, 0) // null — handled at call site
println("$r1, $r2")
}簡単な確認
型宣言の末尾にある ? は何を意味しますか?
まとめ
Kotlin の型は、デフォルトでは nullable ではありません。? を付けると null を許可できます。コンパイラーは、スマートキャスト、セーフコール、Elvis 演算子によって null の処理を強制し、実行前にほとんどの NullPointerException を防ぎます。
よくある質問
「Nullable型と?修飾子」レッスンは無料ですか?
はい。「Nullable型と?修飾子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「Nullable型と?修飾子」で何を学びますか?
Nullable変数を宣言し、コンパイル時に機能するKotlinのnull安全性を理解します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Nullable型と?修飾子」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。