Kotlin Academy · レッスン

安全呼び出しとElvis

?.と?:演算子を学びます

レッスン 2/413 ステップ

「安全呼び出しとElvis」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

Nullable型を簡潔に扱う

どこでもif (x != null)と書くと冗長になります。KotlinにはNullable型の値を扱うための簡潔な演算子が2つあります。

  • 安全呼び出しの?.
  • Elvis演算子の?:

安全呼び出し演算子

安全呼び出しの?.は、値がnullでない場合にだけメソッドを呼び出したりプロパティを読み取ったりします。それ以外の場合、式全体はnullとして評価されます。

クラッシュも、明示的なチェックも必要ありません。

fun main() {
    val name: String? = "Kotlin"
    println(name?.length)
}

nullに対する安全呼び出し

レシーバーがnullの場合、安全呼び出しはそこで処理を打ち切り、例外をスローする代わりにnullを返します。

これが通常のドット呼び出しとの重要な違いです。

fun main() {
    val name: String? = null
    println(name?.length)
}

安全呼び出しのチェーン

安全呼び出しはチェーンとしてつなげられます。チェーン内のいずれかの要素がnullになると、結果全体がnullになります。

これにより、深くネストしたnullチェックを避けられます。

fun main() {
    val text: String? = "hello world"
    val result = text?.uppercase()?.substring(0, 5)
    println(result)
}

Elvis演算子

Elvis演算子の?:は、左辺がnullの場合に代替値を提供します。

「左辺の値を使い、そうでなければ右辺の値を使う」と考えるとわかりやすいでしょう。

fun main() {
    val name: String? = null
    val display = name ?: "Guest"
    println(display)
}

実際の値に対するElvis演算子

左辺がnullでない場合、Elvis演算子はその値をそのまま返し、代替値を無視します。

代替値が使われるのは、値が存在しない場合だけです。

fun main() {
    val name: String? = "Sam"
    val display = name ?: "Guest"
    println(display)
}

安全呼び出しとElvis演算子の組み合わせ

これらの演算子は一緒に使うことがよくあります。安全呼び出しがnullを返す可能性があり、その場合にElvis演算子がデフォルト値を提供します。

これはKotlinで最も一般的なイディオムの1つです。

fun main() {
    val name: String? = null
    val length = name?.length ?: 0
    println(length)
}

早期リターンに使うElvis演算子

Elvis演算子の右辺にはreturnやthrowも指定できます。値が存在しない場合に早期終了するための、簡潔な方法です。

idがnullの場合、関数は直ちに戻ります。

fun process(id: String?) {
    val safeId = id ?: return
    println("Processing " + safeId)
}

fun main() {
    process("A-100")
    process(null)
    println("done")
}

letとの安全呼び出し

?.とletを組み合わせると、値がnullでない場合にだけブロックを実行できます。

ブロック内では、itがnullではない値を参照します。

fun main() {
    val name: String? = "Kotlin"
    name?.let {
        println("Length is " + it.length)
    }
}

Elvis演算子による数値のデフォルト値

Nullable型の数値を計算前に安全なデフォルト値へ変換する場合、Elvis演算子が便利です。

ここでは、nullのcountが0になるため、常に計算できます。

fun main() {
    val count: Int? = null
    val total = (count ?: 0) + 5
    println(total)
}

全体の整理

これらの演算子を組み合わせると、冗長なnullチェックを置き換えられます。

  • ?.はnullでない場合にだけ呼び出します
  • ?:はnullの場合に代替値を提供します
  • チェーンやletを使うと、複雑な処理の流れを簡潔に記述できます
fun main() {
    val input: String? = null
    val name = input?.trim()?.uppercase() ?: "UNKNOWN"
    println(name)
}

理解度チェック

セーフコールとエルビス演算子の理解度を確認しましょう。

まとめ

2つの重要なnull許容演算子を学びました。

  • セーフコール ?. は、クラッシュする代わりにnullを返します
  • エルビス演算子 ?: は、フォールバック値を提供します
  • これらは let や早期リターンと組み合わせてきれいに使えます

次は !! 演算子と、慎重に使うべき理由を見ていきます。

無料で開始

AI チューターと学ぶ Kotlin — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「安全呼び出しとElvis」レッスンは無料ですか?

はい。「安全呼び出しとElvis」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「安全呼び出しとElvis」で何を学びますか?

?.と?:演算子を学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「安全呼び出しとElvis」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Nullable型とNon-Null型
  2. 安全呼び出しとElvis
  3. !!演算子
  4. プラットフォーム型
← Kotlin Academyに戻る