導入
例外設計は、アプリケーションの信頼性を高めるために不可欠な要素です。特に、C#では例外処理の機能が強力であり、適切に活用することでエラー時の挙動を制御できます。本記事では、特定のシチュエーションを通じて、例外設計の重要性と実践的なアプローチを学びます。
教科書レベルの解説(例外設計)
重要な概念の整理
例外設計の核心は、発生する可能性のあるエラーを予測し、それに対する適切な処理を行うことです。特に、外部リソースへのアクセスやユーザー入力に関する処理では、さまざまなエラーが発生する可能性があります。これらのエラーを適切に処理することで、アプリケーションの安定性が向上します。
コード例(C#)
using System;
using System.IO;
class FileProcessor
{
public void ProcessFile(string filePath)
{
try
{
if (string.IsNullOrEmpty(filePath))
{
throw new ArgumentException("ファイルパスは空であってはいけません。");
}
string content = File.ReadAllText(filePath);
Console.WriteLine("ファイルの内容: " + content);
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"ファイルが見つかりません: {ex.Message}");
}
catch (ArgumentException ex)
{
Console.WriteLine($"引数エラー: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"予期しないエラーが発生しました: {ex.Message}");
}
}
}
コードの行ごとの解説
- クラス`FileProcessor`を定義し、ファイル処理のメソッドを持つ。
- `ProcessFile`メソッドで、引数として受け取ったファイルパスが空かどうかをチェックする。
- ファイルが存在しない場合、`FileNotFoundException`をキャッチし、エラーメッセージを出力する。
- 引数が無効な場合は`ArgumentException`をスローし、適切なメッセージを表示する。
- その他の予期しないエラーについては、一般的な`Exception`をキャッチしてエラーメッセージを表示する。
練習問題編
以下の練習問題を通じて、例外設計の理解を深めてください。
-
問題1: 引数として受け取った整数が負の場合、例外をスローするメソッドを実装してください。
public void CheckPositive(int number) { if (number < 0) { throw new ArgumentOutOfRangeException("数値は負であってはいけません。"); } } -
問題2: 配列のインデックスが範囲外の場合に例外を処理するコードを書いてください。
public void AccessArray(int[] array, int index) { try { Console.WriteLine(array[index]); } catch (IndexOutOfRangeException ex) { Console.WriteLine($"インデックスエラー: {ex.Message}"); } } -
問題3: ファイルの書き込み処理を行うメソッドを作成し、例外を処理してください。
public void WriteToFile(string filePath, string content) { try { File.WriteAllText(filePath, content); } catch (UnauthorizedAccessException ex) { Console.WriteLine($"アクセスエラー: {ex.Message}"); } }
まとめ
- 例外処理は、エラー発生時のアプリケーションの挙動を制御するために重要です。
- エラーの種類に応じて適切な例外をキャッチし、ユーザーにわかりやすいメッセージを提供することが求められます。
- 具体的なシチュエーションを想定した例外設計が、実務において役立ちます。