Nullの扱いに関する機能
Kotlinはnullの安全性を重視した言語であり、Nullの扱いに関する機能を備えています。 今回はこれらの機能をサンプルプログラムを交えて勉強してみます。
Null安全演算子「?」
このコードでは、Null安全演算子「?」を使ってNullableな変数がnullの場合に安全にアクセスしています。
Null安全演算子「?」をつけることで、Javaでお馴染みのNullPointerExceptionが発生せず、安全にアクセスできます。
fun main(args: Array<String>) {
var nullableString: String? = "Hello"
// nullableStringがnullでない場合に長さを取得する
val length: Int? = nullableString?.length
println("レングス: $length")
nullableString = null
// nullableStringがnullの場合に安全にアクセスする
val lengthAfterNull: Int? = nullableString?.length
println("NullPointerExceptionにならないので安全です: $lengthAfterNull")
}
処理結果は次の通りです。
レングス: 5
NullPointerExceptionにならないので安全です: null
エルビス演算子「?:」
このコードでは、エルビス演算子「?:」を使用しています。
nullableString?.length ?: -1は、nullableStringがnullの場合は-1を返し、nullでない場合は文字列の長さを返します。
fun main(args: Array<String>) {
var nullableString: String? = null
// nullableStringがnullの場合に代替の値を設定する
val length = nullableString?.length ?: -1
println("変数「nullableString」の値: $length")
}
処理結果は次の通りです。
変数「nullableString」の値: -1
Not-nullアサーション演算子「!!」
「!!」演算子は、Nullableな変数がnullでないことを強制的に前提とします。
あくまで前提とするだけなので実際に変数がnullだった場合はNullPointerExceptionが発生するので注意が必要です。
このコードでは、「!!」演算子を用いて意図的にNullPointerExceptionを発生させ、try-catchブロックでエラーをキャッチしています。
fun main(args: Array<String>) {
var nullableString: String? = null
try {
println("処理開始")
// nullableStringがnullであることを知っているが、強制的に非nullとして扱うため、エラーが発生する
val length = nullableString!!.length
println("エラーになるのでここは通過しません")
} catch (e: NullPointerException) {
println("エラー(NullPointerException): ${e.message}")
}
}
処理結果は次の通りです。
処理開始
エラー(NullPointerException): null
これらのサンプルは、KotlinでNullを扱うための基本的な演算子を示しています。
ただし、「!!」演算子は慎重に使用することをお勧めします。
コードの安定性を確保するために安全な方法でNullを扱う、Null安全演算子「?」やエルビス演算子「?:」を積極的に利用することが重要です。
ここまでの内容は理解できましたか?
あまり理解できなかった人は自分でサンプルを書いてみてください。 知っておいて損は無いので頑張って勉強しましょうね!