C#:
エラー処理
どのようにして:
try-catchブロックから始めましょう。これは、綱渡り芸人の下に安全網を張るようなものです。彼らが滑った場合に、墜落することなく捕まえられるのです。
using System;
class ErrorHandlingExample {
static void Main() {
try {
int[] numbers = {1, 2, 3};
Console.WriteLine(numbers[5]); // おっと、インデックスが範囲外です!
} catch (IndexOutOfRangeException e) {
Console.WriteLine("エラーを捕捉: " + e.Message);
}
}
}
物事がうまくいかない時のサンプル出力:
エラーを捕捉: インデックスは配列の範囲外でした。
次に、finallyブロックを追加します—これは何があっても実行されるもので、例えば税金を支払うことに似ています。
try {
// ここに問題を起こす可能性のあるコード
} catch (SomeSpecificException e) {
// ここでその特定のエラーを処理
} finally {
// 上記で何が起ころうとこのコードは実行される
Console.WriteLine("これは必ず実行されます。");
}
深掘り
エラー処理はC#が誕生して以来取り入れられています。時間とともに進化してきました。昔のプログラマは、問題を知らせるために戻り値やグローバルフラグに頼っていました—使い勝手が悪く、エラーが発生しやすい方法です。
C#は例外という、より現代的なアプローチを使用します。予期しない事態が発生したときに例外が投げられます。これは、フットボールでプレー中にフラグを投げるようなものです。try、catch、finallyブロックで構成される構造化例外処理は、古いスタイルのエラーチェックに比べて、これらの瞬間をクリアかつクリーンに管理することを可能にしています。
代替手段はありますか?もちろんです。例外がすり抜けた場合のUnhandledExceptionEventHandler
や、非同期コードでは例外が含まれるTask
オブジェクトを使ったエラー処理があります。
実装の詳細—細かい文字通りに言えば—は重要です。例外はコストがかかる可能性があり、安易に投げられるとパフォーマンスが低下する可能性があります。そのため、我々は毎日のロジック制御ではなく、例外的なケースに対してそれを使用します。