はじめに
C#を書き始めた頃、
エラーが出ると少し怖く感じていました。
赤いメッセージが出て、プログラムが止まってしまう。
「とりあえずtry-catchで囲めばいいのかな?」
そんな状態からスタートした記憶があります。
今回は、
例外処理ってそもそも何なのか?
を、なるべくやさしく整理してみます。
例外ってなに?
例外とは、
プログラムの実行中に発生するエラーのことです。
例えばこんなケースです。
- null(何も入っていない値)を使おうとした
- 数字に変換できない文字を数値に変換しようとした
- 存在しないデータを取得しようとした
こうした問題が起きると、何も対処しなければプログラムは停止します。
try-catchの基本形
例外が発生しても、
すぐに止まらないようにする仕組みが try-catch です。
try
{
// エラーが起きるかもしれない処理
}
catch (Exception ex)
{
// エラーが起きたときの処理
}tryの中で処理を実行する- エラーが起きたら
catchに移る
という流れになります。
具体例で見てみる
例えば、文字列を数値に変換する処理です。
string input = "abc";
int number = int.Parse(input);このコードはエラーになります。
なぜなら "abc" は数値に変換できないからです。
これを try-catch で囲むとこうなります。
try
{
string input = "abc";
int number = int.Parse(input);
}
catch (Exception ex)
{
Console.WriteLine("変換に失敗しました");
}これで、エラーが起きてもプログラムは停止しません。
例外処理の目的
例外処理の目的は、
「エラーをなかったことにする」ことではありません。
大事なのは、
- 何が起きたのか
- どう対応するのか
を考えることです。
例えば:
- ユーザーにエラーメッセージを表示する
- ログに記録する
- 安全な値に置き換える
といった対応が考えられます。
とりあえずcatchはやらない
初心者の頃にやりがちなのが、
catch (Exception)
{
}何も書かないcatchです。
これだと、
エラーが起きても何も分からなくなってしまいます。
少なくとも、ログを出すなど
「何が起きたか分かる状態」にしておくことが大切です。
例外は「想定外」に使う
すべてを例外で処理する必要はありません。
例えば、
if (input == "")
{
return;
}これは「想定内」の分岐です。
例外は、
- 普通は起きない
- 起きたら困る
といった「想定外」のケースに使うと考えると分かりやすいです。
まとめ
例外処理は、
エラーを消すためのもの
ではなく、
エラーにきちんと向き合うための仕組み
だと理解するようになりました。
最初は、
- try-catchの形を覚える
- エラーが起きる理由を理解する
これだけでも十分です。
少しずつ慣れていけば大丈夫です。
次回予告
次は、
よくある例外の種類とその対処方法を、
もう少し具体的にまとめてみます。
- NullReferenceException
- FormatException
- InvalidOperationException
などを、実例つきで整理していく予定です。
