C#上級

上級 C#で学ぶ例外設計|練習問題編

導入

例外処理は、プログラムの堅牢性を高めるための重要な要素です。特にC#のような言語では、例外を効果的に処理することで、エラー発生時の動作を制御し、ユーザー体験を向上させることができます。今回は、特定のシチュエーションに基づいた例外設計について探求し、実務で役立つ知識を深めます。

教科書レベルの解説(例外設計)

重要な概念の整理

例外設計において、まず考慮すべきは「例外の種類」です。C#では、システム例外とアプリケーション例外があり、それぞれ異なる目的で使用されます。システム例外は、環境に依存する問題を示し、アプリケーション例外は、ビジネスロジックに関連するエラーを示します。この区別を理解することで、適切な例外処理を実装する基盤が整います。

コード例(C#)


using System;

public class DataProcessor
{
    public void ProcessData(string input)
    {
        if (string.IsNullOrEmpty(input))
        {
            throw new ArgumentException("Input cannot be null or empty.", nameof(input));
        }

        try
        {
            // データ処理のロジック
            Console.WriteLine($"Processing: {input}");
            // ここで例外が発生する可能性のある処理を行う
        }
        catch (FormatException ex)
        {
            // 特定の例外をキャッチして処理
            Console.WriteLine($"Data format error: {ex.Message}");
        }
        catch (Exception ex)
        {
            // その他の例外をキャッチ
            Console.WriteLine($"An unexpected error occurred: {ex.Message}");
            throw; // 再スローすることで上位層に通知
        }
    }
}

コードの行ごとの解説

  1. using System; – 必要な名前空間をインポート。
  2. public class DataProcessor – データ処理を行うクラスを定義。
  3. public void ProcessData(string input) – データ処理のメソッドを定義。
  4. if (string.IsNullOrEmpty(input)) – 入力が空でないかをチェック。
  5. throw new ArgumentException(…) – 入力が不正な場合、例外をスロー。
  6. try { … } – 例外が発生する可能性のある処理を囲む。
  7. catch (FormatException ex) – 特定の例外をキャッチして処理。
  8. catch (Exception ex) – その他の例外をキャッチし、エラーメッセージを表示。
  9. throw; – 例外を再スローし、上位層に通知。

練習問題編

以下の練習問題に挑戦し、例外設計の理解を深めましょう。

  1. 問題1: 引数に負の値が渡された場合に、適切な例外をスローするメソッドを実装してください。
  2. 問題2: 複数の例外を同時にキャッチし、それぞれに対して異なる処理を行うコードを示してください。
  3. 問題3: 再スローした例外をキャッチして、エラーログをファイルに記録する処理を追加してください。
  4. 問題4: 例外が発生した場合に、ユーザーに通知する機能を追加してください。
  5. 問題5: 例外処理のないコードを示し、どのような問題が発生するかを説明してください。

まとめ

  • 例外設計は、プログラムの信頼性を向上させるために不可欠な要素である。
  • 例外の種類を理解し、適切な処理を実装することが重要。
  • 特定のシチュエーションを想定した例外処理は、実務での問題解決に直結する。