え~と私は使うの大好きです。というのは例外処理で楽できるから。
例外 (exception) を嫌っている人も多いと思いますが、そもそも例外って何で生まれたのでしょう?
古の C では例外なんて無かったと聞いています。そのころの coding は下記のような感じですね。
if (処理1)
{
例外処理1
}
if (処理2)
{
例外処理2
}
この場合、処理の数だけ例外処理を書かないといけませんね。ついでに戻ってくるのは数値なのでより詳細な情報を得るためにはさらに別の関数 (Win32 であれば GetLastError ついでに FormatMessage) を呼び出す必要があります。実際問題非常に面倒です。
例外処理が共通な場合、「例外処理1」と「例外処理2」は一致するわけです。同じものを複数書くのは非常に無駄ですね。これを例外を使ってやってみるとどうなるでしょう。
try
{
処理1
処理2
}
catch (例外)
{
例外処理
}
非常に simple にまとまりましたね。それだけではなく、例外を使うことによって得られる利点には下記のものがあります。
- 上位呼び出し元への伝播が自動的に行われる
- 標準の例外 object を利用することにより処理の共通化が図れる
- Error code 以外の情報を得るのが容易
大体こんなものがあると思います。
間違いなく確かなことは標準的な例外を利用することによって例外処理が容易にかつ効率的に間違いなく実装できるんです。これだけの利点があります。
ではなぜ例外を忌み嫌っている人がいるのでしょう?
その理由としては例外がかなり重い処理であるということです。興味がある方は mxb さんが以前解説されているので聴いてみてください。
「Exceptionのしくみ」
したがって、処理速度がほかの何よりも要求される要件では例外を使うべきでないでしょう。しかし、例外を使わないと処理が複雑化する場合が多いです。複雑化すると当然それだけ bug が生まれやすくなります。それに例外には先述説明したような利点があります。実際問題どうするべきでしょう?
個人的には例外を利用しない利点としては performance tuning のためくらいしか理由が見当たりません。なので、先述説明したような例外を利用する利点と performance tuning で得られる効果を見比べてその要件に対し、どちらが効果があるかで選択するべきでしょう。
個人的には milli seconds 単位の performance tuning が求められる要件でもない限り例外を積極的に利用しない理由はないんじゃないかと思います。
ただし、例外を確実に回避する簡単な方法が用意されているのにそれを利用しないのはどうかと思いますねぇ。TryParse を利用していないのは正直どうかと。
う~む。まとまっていないなぁ。。。
ちなみにこいつを書いたきっかけはこちら
ファイルのチェック