※これは2013年に書いたものです。
空の Catch
社内の開発プロジェクトから CDI を依頼されたとき、次のようなソースコードを発見しました。
Try ' 処理(この記事では関係がないので割愛します) Catch ex As Exception ' 何もしない End Try
何もしないというのはどういうことかをプログラマに質問したところ、「サンプルのソースコードでは例外が発生したときには○○をする処理が書かれていたけれど、ここでは何もする必要がないため削除しました」 とのことでした。
上記のコードでは発生した例外をキャッチした後は何もしないという動作になり、例外は発生しなかったものとして以降の処理が継続されます。Exception 型でキャッチしていますので、全ての例外が無視されます。不正な状態で処理が継続されることによって不正なデータ更新が行われてしまったりするため、非常に問題です。
Catch の役割
例外が発生したときに何らかの処理を行う必要がないのであれば Try-Catch 自体が不要です。例外が発生する可能性があり、発生した場合は不正な状態から復帰させてアプリケーションの動作を継続させたいという場合にのみ、Try-Catch を用いてその例外に対する処理を記述するようにします。 むやみやたらと Try-Catch したり、Exception 型を対象に全ての例外をキャッチしたり、Finally 句が適切に使われていなかったりと、例外の捕捉については周知が必要なことが多いですね。
マイクロソフトのコンサルタントの方のブログに例外処理について説明されている記事があります。特に開発プロジェクトテンプレートやコーディングルールを作成するにあたって例外処理についてしっかり理解しておきたいという人は見ておくとよいと思います。
とあるコンサルタントのつぶやき -- .NETの例外処理 Part.1~4
.NETの例外処理 Part.1 .NETの例外処理 Part.2 .NETの例外処理 Part.3 .NETの例外処理 Part.4
0 件のコメント:
コメントを投稿