0Pricing
Kotlin Academy · レッスン

runCatching

例外を値として捕捉します

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

例外の取り込み

runCatching はブロックを実行し、その結果を Result にラップします。戻り値は成功になり、スローされた例外は失敗になります。try/catch は必要ありません。

基本的な使い方

ラムダを渡します。最後の式が成功時の値になります。

fun main() {
    val r = runCatching { 10 / 2 }
    println(r.isSuccess)
    println(r.getOrNull())
}

スローされたエラーの捕捉

ブロックが例外をスローすると、runCatching はそれを伝播させずに保存します。

fun main() {
    val r = runCatching { 10 / 0 }
    println(r.isFailure)
    println(r.exceptionOrNull()?.message)
}

危険なパース処理のラップ

よくある用途は、パース処理のように例外をスローする可能性がある呼び出しをラップすることです。これにより、失敗を処理可能な値として扱えます。

fun main() {
    val good = runCatching { "42".toInt() }
    val bad = runCatching { "abc".toInt() }
    println(good.getOrNull())
    println(bad.getOrNull())
}

レシーバーとしてのrunCatching

レシーバーオブジェクトに対して runCatching を呼び出すこともできます。ブロック内の this はそのオブジェクトを参照します。値に対する操作を連鎖させる場合に便利です。

fun main() {
    val text = "  99 "
    val r = text.runCatching { trim().toInt() }
    println(r.getOrNull())
}

インラインでの復旧

getOrElse と組み合わせると、呼び出し箇所で代替値をすぐに指定できます。

fun main() {
    val n = runCatching { "oops".toInt() }.getOrElse { -1 }
    println(n)
}

両方の分岐に対応するfold

fold は成功と失敗を1回の呼び出しで処理し、どちらの分岐からも単一の値を返します。

fun main() {
    val message = runCatching { "50".toInt() }.fold(
        onSuccess = { "got " + it },
        onFailure = { "error: " + it.message }
    )
    println(message)
}

try/catchのリファクタリング

値を返す try/catch を記述する場面では、runCatching のほうが簡潔で、結果をデータとして保持できます。

fun safeDivide(a: Int, b: Int): Result<Int> =
    runCatching { a / b }

fun main() {
    println(safeDivide(8, 2).getOrNull())
    println(safeDivide(8, 0).exceptionOrNull()?.message)
}

広範囲な捕捉に注意する

runCatching は、無視したくないものも含めて すべての Throwable を捕捉します。大きすぎるブロックをラップすることは避け、捕捉する範囲を小さく、意図的に保ってください。

変換の連鎖

runCatching は Result を生成するため、その直後に map や recover を連鎖させることができます。これらについては次のレッスンで扱います。

fun main() {
    val r = runCatching { "7".toInt() }.map { it * 10 }
    println(r.getOrNull())
}

役立つ理由

runCatching は、例外をスローするコードと、値を中心とした Result の世界を橋渡しします。例外をスローする API を呼び出す場合でも、関数型のエラー処理を取り入れられます。

理解度チェック

runCatching についての理解度を確認しましょう。

まとめ

runCatching について学びました。

  • ブロックの結果を Result にラップする
  • スローされた例外を失敗に変換する
  • getOrElse や fold と組み合わせる
  • 捕捉する範囲を小さく保つ

次は、sealed result 階層の構築です。

よくある質問

「runCatching」レッスンは無料ですか?

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

「runCatching」で何を学びますか?

例外を値として捕捉します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「runCatching」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Result型
  2. runCatching
  3. SealedなResult階層
  4. 関数型エラーハンドリング
← Kotlin Academyに戻る