Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Kotlin辞典

  1. トップページ
  2. Kotlin辞典
  3. try / catch / finally

try / catch / finally

Kotlinの例外処理は『try』『catch』『finally』を使います。Kotlinでは『try』が式として値を返せるため、例外発生時のデフォルト値を簡潔に書けます。

構文
// 基本形
try {
    // 例外が発生する可能性がある処理
} catch (e: 例外型) {
    // 例外が発生したときの処理
} finally {
    // 例外の有無に関わらず必ず実行される処理
}

// try 式(値を返せます)
val result = try {
    文字列.toInt()
} catch (e: NumberFormatException) {
    -1  // 例外発生時のデフォルト値
}
構文一覧
構文概要
try { } catch (e: 型) { }例外をキャッチして処理します。
finally { }例外の有無に関わらず必ず実行されます(リソース解放等)。
throw 例外オブジェクト例外を発生させます。
try 式try ブロック(または catch)の最後の式が戻り値になります。
catch (e: IOException)特定の例外型をキャッチします。複数の catch を書けます。
サンプルコード
fun divide(a: Int, b: Int): Int {
    if (b == 0) throw IllegalArgumentException("0で割れません")
    return a / b
}

fun main() {
    // 基本的な try-catch-finally
    try {
        println(divide(10, 2))   // 5
        println(divide(10, 0))   // 例外が発生します
    } catch (e: IllegalArgumentException) {
        println("エラー: ${e.message}")  // エラー: 0で割れません
    } finally {
        println("finally は必ず実行されます")
    }

    // try 式 — 値を返せます
    val n1 = try { "42".toInt() } catch (e: NumberFormatException) { -1 }
    val n2 = try { "abc".toInt() } catch (e: NumberFormatException) { -1 }
    println(n1)  // 42
    println(n2)  // -1(変換失敗時のデフォルト値)

    // 複数の catch で異なる例外を処理します。
    try {
        val list = listOf(1, 2, 3)
        println(list[5])  // IndexOutOfBoundsException
    } catch (e: IndexOutOfBoundsException) {
        println("インデックスが範囲外です: ${e.message}")
    } catch (e: Exception) {
        println("その他のエラー: ${e.message}")
    }
}
概要

KotlinはJavaと異なり、チェック例外(checked exception)がありません。すべての例外は非チェック例外のため、キャッチを強制されることはありませんが、必要に応じてキャッチしてください。

『try』を式として使うと、例外発生時のデフォルト値を簡潔に書けます。『?.let』や『runCatching()』と組み合わせると、より関数型スタイルの例外処理も書けます。

前提条件チェックにはrequire() / check() / error()を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。