0Pricing
Kotlin Academy · レッスン

runCatchingとResult<T>

runCatchingで例外をResultにラップし、関数型に処理します。

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

Result<T>の概要

Result<T>は、処理の結果を表すKotlinのラッパーです。T型の値を伴う成功か、Throwableを伴う失敗のいずれかになります。

runCatchingの基本

runCatching { ... }はブロックを実行し、その結果をResultでラップします。

fun main() {
    val good = runCatching { 10 / 2 }
    val bad  = runCatching { 10 / 0 }
    println("good isSuccess = ${good.isSuccess}")
    println("bad isFailure  = ${bad.isFailure}")
}

値を取り出す

getOrNullは値またはnullを返します。getOrThrowは失敗時に再スローします。getOrDefaultは代替値を返します。

fun main() {
    val r = runCatching { "42".toInt() }
    println(r.getOrNull())          // 42
    println(r.getOrDefault(-1))    // 42
    val bad = runCatching { "x".toInt() }
    println(bad.getOrNull())       // null
    println(bad.getOrDefault(0))   // 0
}

例外を取り出す

exceptionOrNull()は失敗時に例外を返し、成功時にはnullを返します。

fun main() {
    val r = runCatching { error("boom") }
    println(r.exceptionOrNull()?.message) // boom
}

mapで変換する

map { value -> ... }は成功時の値を変換します。失敗は変更されずにそのまま渡されます。

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

mapCatching

mapCatchingは変換処理をtry/catchでラップするため、ラムダ内の例外も失敗になります。

fun main() {
    val r = runCatching { "abc" }.mapCatching { it.toInt() }
    println(r.isFailure) // true
    println(r.exceptionOrNull()?.message) // For input string: "abc"
}

recoverとrecoverCatching

recover { e -> fallback }は、回復値を計算して失敗を成功に変換します。

fun main() {
    val r = runCatching { "abc".toInt() }
        .recover { -1 }
    println(r.getOrNull()) // -1
}

onSuccessとonFailure

onSuccessとonFailureは、Resultを変更せずに副作用を実行するために使用します。

fun main() {
    runCatching { "42".toInt() }
        .onSuccess { println("parsed: $it") }
        .onFailure { println("failed: ${it.message}") }
}

両方の経路に対応するfold

fold(onSuccess, onFailure)は、どちらの分岐からも統一された型を返します。UI向けの値に変換する場合に便利です。

fun main() {
    val r = runCatching { "10".toInt() }
    val msg: String = r.fold(
        onSuccess = { "OK: $it" },
        onFailure = { "ERR: ${it.message}" }
    )
    println(msg)
}

戻り値の型としてResultを使用する

関数がResult<T>を返すようにすると、呼び出し側でエラー処理を明示できます。

fun parseInt(s: String): Result<Int> = runCatching { s.toInt() }
fun main() {
    parseInt("42").onSuccess { println("got $it") }
    parseInt("xx").onFailure { println("oops: ${it.message}") }
}

処理を連結する

runCatchingとmap、mapCatching、recoverを組み合わせて、流れるようなエラーパイプラインを構築できます。

fun fetchUserId(): Result<Int> = runCatching { 42 }
fun loadName(id: Int): String = "User-$id"
fun main() {
    val name = fetchUserId()
        .map { loadName(it) }
        .recover { "Anonymous" }
        .getOrNull()
    println(name)
}

クイックチェック

ブロックを実行し、その結果(値または例外)をResultでラップするビルダーはどれですか。

まとめ

Result<T>は成功または失敗を表します。runCatchingで作成し、mapまたはmapCatchingで変換し、recoverで回復し、onSuccessまたはonFailureで状態を確認し、foldで1つの結果にまとめます。明示的なエラーパイプラインに適しています。

よくある質問

「runCatchingとResult<T>」レッスンは無料ですか?

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

「runCatchingとResult<T>」で何を学びますか?

runCatchingで例外をResultにラップし、関数型に処理します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

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

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

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

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

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

  1. 式としてのtry/catch/finally
  2. カスタム例外クラスの作成
  3. runCatchingとResult
  4. 例外の再スローとチェーン
← Kotlin Academyに戻る