Public Function A() Try If Not AA() Then Return False End If ' なんらかの処理 Catch ex As Exception MessageBox.Show("A にてエラーが発生しました。", "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Return False End Try Return True End Function Public Function AA() As Boolean Try If Not AAA() Then Return False End If ' なんらかの処理 Catch ex As Exception MessageBox.Show("AA にてエラーが発生しました。", "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Return False End Try Return True End Function Public Function AAA() As Boolean Try ' なんらかの処理 Catch ex As Exception MessageBox.Show("AAA にてエラーが発生しました。", "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Return False End Try Return True End Functionつまりこんな感じの処理です。
A関数処理 AA関数処理 AAA関数処理 AA関数処理 A関数処理AAA関数でエラーが発生した場合、AAの後の処理は行ってはいけないわけです。 行わないように
If Not AAA() Then Return False End Ifと記述し、エラーの場合は即座に親関数に戻しています。
私はこの記述が面倒くさいと考えました。
面倒な理由は
・ If Not ~ という記述を毎回行わないといけない。
・ エラーメッセージの記述が面倒。メンテナンスも面倒。
そこで考案した方法は、
Public Class ExitException Inherits Exception Public Sub New(Optional ByVal ErrMsg As String = "エラーが発生しました。") MyBase.New(ErrMsg) End Sub Public Sub New(ByVal ErrMsg As String, ByVal ex As Exception) MyBase.New(ErrMsg, ex) End Sub End Class Public Function A() Try Call AA() ' なんらかの処理 Catch ex As Exception ErrMsg(ex, "A にてエラーが発生しました。") Throw New ExitException End Try Return True End Function Public Function AA() As Boolean Try Call AAA() ' なんらかの処理 Catch ex As Exception ErrMsg(ex, "AA にてエラーが発生しました。") Throw New ExitException End Try Return True End Function Public Function AAA() As Boolean Try ' なんらかの処理 Catch ex As Exception ErrMsg(ex, "AAA にてエラーが発生しました。") Throw New ExitException End Try Return True End Function Public Sub ErrMsg(ByVal ex As Exception, Optional ByVal Message As String = "") If TypeOf ex Is ExitException Then Exit Sub Else If Message = "" Then ' メッセージを指定していない場合 Message = "不正なエラーが発生しました。" ' 実行関数名取得してメッセージに含める。これに関してはまた改めて・・ End If MessageBox.Show(Message, "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If End Subです。 まず、 if Not ~ の記述がなくなっています。
そして共通エラークラスとして ExitException というのが増えており、 ErrMsgという共通関数が増えています。
ExitException ・・・ 発生した場合、エラーメッセージを表示しないエラー。素通りのエラー。
ErrMsg ・・・ エラーメッセージを表示する関数。ログ書き込みとかもここで実装していいかもしれません。
クラス化してログ書き込みパラメータとかにするともっといいかもしれませんね。
Throw New ExitException を実行するとエラーメッセージを出さずに親の関数にエラーを通知できると考えれば良いと思います。
また、ErrMsgなどで呼び出し元の実行関数名を取得することもできるので、エラーメッセージやログに活用することもできます。
とりあえず少し走り書きで書きましたが、ここまで。
0 件のコメント:
コメントを投稿