非nullアサーション
CoddyのKotlinジャーニー「基礎」セクションの一部。レッスン 17/93。
セーフコール演算子とエルビス演算子は null を適切に処理しますが、コード内の特定の時点で nullable 値が null ではないと確信している場合もあります。null 非許容アサーション演算子 !! を使うと、Kotlin に「これは null ではないと保証します」と伝えられます。
fun main() {
val name: String? = "Alice"
val length = name!!.length // String? を String に変換します
println(length) // 出力: 5
}!!演算子は、null 許容型を null 非許容型に変換します。ただし、値が実際に null の場合、プログラムはNullPointerExceptionでクラッシュします。
fun main() {
val name: String? = null
val length = name!!.length // ここでクラッシュします!
}使用するタイミング:値が null にならないことを保証するロジックがあるものの、コンパイラーがそれを検証できない場合にのみ !! を使用してください。ほとんどの場合は、代わりに安全呼び出し ?. またはエルビス演算子 ?: を使用することを推奨します。非 null アサーションは最初の選択肢ではなく、最後の手段にしてください。
チャレンジ
簡単textパラメーターを受け取り、大文字に変換したバージョンの長さを返す関数 getUppercaseLength を作成してください。
この関数は null ではない文字列値を受け取りますが、パラメーターの型は nullable です(String?)。not-null アサーション演算子 !! を使用して nullable 型を non-nullable 型に変換し、uppercase() メソッドをチェーンしてから length を取得してください。
パラメーター:
text(String?): 値を含むことが保証された nullable な文字列
戻り値: text を大文字に変換したバージョンの長さ(Int)
注: このチャレンジでは、入力は常に有効な文字列であり、決して
nullにはなりません。これは、値が存在することは分かっているものの、コンパイラーではそれを検証できない状況をシミュレートしています。
自分で試してみよう
fun getUppercaseLength(text: String?): Int {
// ここにコードを書いてください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド