言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理に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()を参照してください。

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