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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Result型
- runCatching
- SealedなResult階層
- 関数型エラーハンドリング