0Pricing
Kotlin Academy · レッスン

実際のコードで使う安全呼び出し?.とElvis ?:

安全呼び出しをチェーンし、Elvis演算子でフォールバック値を指定します。

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

大きな効果をもたらす2つの演算子

セーフコール ?. は、レシーバーが非 null の場合にだけメンバーを呼び出します。Elvis 演算子 ?: は、左辺が null の場合にフォールバック値を提供します。

セーフコールの基本

x?.member は、x が null の場合は null に評価され、それ以外の場合は通常どおり member にアクセスします。

fun main() {
    val name: String? = "Kotlin"
    val len: Int? = name?.length
    println(len) // 6
    val nope: String? = null
    println(nope?.length) // null
}

Elvis 演算子の基本

x ?: default は、x が非 null なら x を返し、それ以外の場合は右辺の default を返します。

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

セーフコールと Elvis の組み合わせ

よく使われる書き方は obj?.member ?: default です。値を読み取り、なければフォールバックします。

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

セーフコールの連結

複数の階層にわたって ?. を連結できます。どこか1つのリンクが null になると、式全体が null に短絡評価されます。

class Address(val city: String?)
class User(val address: Address?)
fun main() {
    val u: User? = User(Address(null))
    val city = u?.address?.city ?: "Unknown"
    println(city) // Unknown
}

右辺での Elvis による例外送出

Elvis の右辺には throw を含め、任意の式を置けます。必須値のチェックに便利です。

fun loadConfig(path: String?): String {
    val p = path ?: throw IllegalArgumentException("path required")
    return "loaded $p"
}
fun main() {
    println(loadConfig("/etc/app"))
    // loadConfig(null) // throws
}

メソッドでのセーフコール

セーフコールは、プロパティへのアクセスだけでなく、任意のメソッドにも使用できます。

fun main() {
    val raw: String? = "  hello  "
    val cleaned = raw?.trim()?.uppercase() ?: ""
    println(cleaned) // HELLO
}

条件式でのセーフコール

条件式の中でもセーフコールを使用できます。Elvis と組み合わせると、Boolean のデフォルト値を指定できます。

fun main() {
    val name: String? = "Alice"
    if (name?.startsWith("A") == true) {
        println("Starts with A")
    }
}

return と Elvis

ガード節では Elvis と return を使用し、必須値が null の場合に早期に処理を抜けます。

fun process(input: String?) {
    val safe = input ?: return
    println("processing $safe")
}
fun main() {
    process("abc")
    process(null) // returns silently
}

continue/break と Elvis

ループ内では、Elvis から continue または break に短絡させることで、null の処理を簡潔に記述できます。

fun main() {
    val items: List<String?> = listOf("a", null, "b", null, "c")
    for (item in items) {
        val v = item ?: continue
        print("$v ")
    }
    println() // a b c
}

実践:設定の検索

セーフコールと Elvis を組み合わせると、任意の設定をデフォルト値付きで読み取る処理を1行で記述できます。

class Config(val timeoutMs: Int?, val host: String?)
fun main() {
    val cfg: Config? = Config(null, "prod.example.com")
    val timeout = cfg?.timeoutMs ?: 5000
    val host = cfg?.host ?: "localhost"
    println("$host @ $timeout ms")
}

簡単な確認

user が null の場合、user?.email ?: "unknown" は何に評価されますか?

まとめ

セーフコール(?.)と Elvis(?:)を組み合わせると、簡潔で null 安全なコードを記述できます。throw や return と Elvis を組み合わせると、データがない場合に早期に処理を抜けるガード節を作成できます。

よくある質問

「実際のコードで使う安全呼び出し?.とElvis ?:」レッスンは無料ですか?

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

「実際のコードで使う安全呼び出し?.とElvis ?:」で何を学びますか?

安全呼び出しをチェーンし、Elvis演算子でフォールバック値を指定します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「実際のコードで使う安全呼び出し?.とElvis ?:」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Nullable型と?修飾子
  2. 実際のコードで使う安全呼び出し?.とElvis ?:
  3. Nullableレシーバーで使うlet、also、run
  4. !!演算子:避けるべき場面と理由
← Kotlin Academyに戻る