Kotlinでは、例外処理をより簡潔に書くためにrunCatching
という便利な関数が用意されています。通常のtry-catch
を使わずにエラーを処理できるため、可読性が向上し、コードがスッキリまとまります。
runCatchingの基本的な使い方
通常、Kotlinで例外処理を行う場合はtry-catch
を使います。
Kotlin
try {
val number = "123a".toInt()
println(number)
} catch (e: NumberFormatException) {
println("エラー発生: ${e.message}")
}
しかし、この書き方ではtry-catch
ブロックが長くなり、エラーハンドリングが煩雑になりがちです。runCatching
を使えば、これをシンプルにできます。
Kotlin
val result = runCatching {
"123a".toInt()
}.getOrElse {
println("エラー発生: ${it.message}")
0
}
println(result) // 出力: エラー発生: For input string: "123a"
// 0
runCatchingのポイント
try-catch
を省略してコードを短くできるgetOrElse
を使うことで、例外発生時のデフォルト値を設定可能onFailure
を使えばエラー時のログ出力を簡単に追加できる
runCatchingの応用例
1.成功時と失敗時で異なる処理を行う
Kotlin
val result = runCatching {
"42".toInt()
}.onSuccess {
println("変換成功: $it")
}.onFailure {
println("エラー発生: ${it.message}")
}.getOrDefault(-1)
println("最終結果: $result")
出力(成功時):
変換成功: 42
最終結果: 42
出力(失敗時):
エラー発生: For input string: "abc"
最終結果: -1
2.例外を発生させずに安全に値を取得
Kotlin
val number: Int? = runCatching { "100".toInt() }.getOrNull()
println(number) // 出力: 100
失敗した場合はnull
が返るため、?:
を使ってデフォルト値を指定することもできます。
Kotlin
val safeNumber = runCatching { "abc".toInt() }.getOrNull() ?: 0
println(safeNumber) // 出力: 0
まとめ
runCatching
を使うことで、例外処理をより簡潔に記述できるgetOrElse
やonFailure
を活用すると、エラーハンドリングを柔軟に制御可能getOrNull
を使えば、null安全な処理にも対応できる
エラーハンドリングをスマートに行いたい場合は、ぜひrunCatching
を活用してみてください!