Kotlin と Swift のエラーハンドリングの違い

2025/02/13に公開

Kotlin と Swift のエラーハンドリングの違いを考察

最近 Kotlin を書き始めて Swift とのエラーハンドリングの違いに少し驚きました。

そこでこの記事では、Kotlin と Swift のエラーハンドリング(try-catch/do-catch)の仕組みの違いについて解説します。
具体的には、Kotlin の例外処理と Swift のエラー処理の設計思想やコード例を交えて説明します。


1. はじめに

プログラミングにおけるエラーハンドリングは、予期せぬエラーに対処し、アプリケーションの安定性を保つために重要な要素です。
Kotlin と Swift はどちらもモダンな言語ですが、エラーハンドリングに関しては以下のような違いがあります。


2. Kotlin のエラーハンドリング

Kotlin(および Java)の例外処理は、すべて「unchecked exception」として扱われます。
そのため、例外をスローする可能性のある関数でもシグネチャに throws を記述する必要はなく、コンパイラが強制的にチェックしません。
この設計により、任意の例外を try-catch ブロックで自由に捕捉できます。

Kotlin のコード例

try {
    // 例外が発生する可能性のある処理
    val result = riskyOperation()
    println("結果: $result")
} catch (e: Exception) {
    // 例外発生時の処理
    println("エラーが発生しました: ${e.message}")
} finally {
    // 必ず実行される処理
    println("処理終了")
}

3. Swift のエラーハンドリング

Swift では、エラーをスローする関数は必ず throws キーワードで宣言する必要があります。
そのため、エラーが発生する可能性のある呼び出しでは、try(または try?, try!)を明示的に使用する必要があり、コンパイラがエラーハンドリングを強制します。
エラー処理は do-catch ブロックを使って記述されます。

Swift のコード例

func riskyOperation() throws -> Int {
    // エラーが発生する可能性のある処理
    if someCondition {
        throw MyError.operationFailed
    }
    return 10
}

do {
    let result = try riskyOperation()
    print("結果: \(result)")
} catch {
    // エラー発生時の処理
    print("エラーが発生しました: \(error)")
}

4. 主な違いのまとめ

  • 例外の宣言とチェック

    • Kotlin: 例外は「unchecked」として扱われ、関数宣言に throws を記述する必要がありません。
    • Swift: エラーをスローする関数は必ず throws を宣言し、呼び出し時に try が必須です。
  • コードの可読性と安全性

    • Kotlin: 柔軟なエラーハンドリングが可能ですが、エラー処理の抜け漏れが起こりやすい面があります。
    • Swift: コンパイラがエラーハンドリングを強制するため、エラー処理の漏れを防止できます。

5. まとめ

Kotlin は、例外が「unchecked」として扱われるため、柔軟なエラーハンドリングが可能ですが、開発者自身が適切なエラー処理を行う責任があります。
一方、Swift はエラー処理を明示的に宣言し、コンパイラがエラーハンドリングを保証するため、より安全な設計がなされています。

それぞれの言語の特性を理解し、プロジェクトに応じた適切なエラーハンドリングの実装を行いましょう!


この記事が、Kotlin と Swift のエラーハンドリングの理解に役立つことを願っています。

Discussion