Menu
CoddyTech

セーフコール演算子

CoddyのKotlinジャーニー「基礎」セクションの一部。レッスン 14/93。

null を許容する変数がある場合、その変数のメソッドを直接呼び出したり、プロパティにアクセスしたりすることはできません。値が null である可能性があるため、コンパイラーが許可しないからです。セーフコール演算子 ?. を使うと、この問題を簡潔に解決できます。

通常のドット . の代わりに ?. を使うと、nullable 型のメンバーに安全にアクセスできます。

fun main() {
    val name: String? = "Alice"
    val length = name?.length  // 5を返す
    println(length)
    
    val nullName: String? = null
    val nullLength = nullName?.length  // nullを返す(クラッシュしない!)
    println(nullLength)
}

安全呼び出し演算子は、プロパティやメソッドにアクセスする前に値が null かどうかを確認します。値が null の場合、クラッシュする代わりに式全体が null を返します。値が存在する場合は、通常の呼び出しと同じように動作します。

複数の安全呼び出しを連鎖させることもできます。

fun main() {
    val text: String? = "Hello"
    val result = text?.uppercase()?.length
    println(result)  // 出力: 5
}

チェーンの一部が null の場合、エラーをスローすることなく、式全体が安全に null を返します。

challenge icon

チャレンジ

簡単

次の nullable 変数が与えられています。

val message: String? = "Kotlin"

セーフコール演算子を使って、次のことを行ってください。

  1. messageの長さを取得して出力する
  2. messageを大文字に変換し、結果を出力する

次に、もう1つ nullable 変数を作成してください。

val empty: String? = null

セーフコール演算子を使って、emptyの長さを取得して出力してください。

各結果は別々の行に出力してください。セーフコール演算子は、値がnullの場合にnullを返すことを忘れないでください。

自分で試してみよう

fun main() {
    val message: String? = "Kotlin"
    
    // TODO: セーフコール演算子を使ってmessageの長さを取得し、表示する
    
    // TODO: セーフコール演算子を使ってmessageを大文字に変換し、表示する
    
    val empty: String? = null
    
    // TODO: セーフコール演算子を使ってemptyの長さを取得し、表示する
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Kotlinプレイグラウンド