Module1 |
Option Explicit
Public Const ERR_NO_ERR As Integer = 0 '正常終了 Public Const ERR_DIVIDE_0 As Integer = -1 '0で割ろうとしたときのエラーコード 'x÷yを計算し、結果をzに格納します '戻り値:yが0のとき:ERR_DIVIDE_0 ' :上記以外の場合:ERR_NO_ERR Function divide(ByVal x As Double, ByVal y As Double, ByRef z As Double) As Integer If y = 0 Then divide = ERR_DIVIDE_0 Exit Function End If z = x / y divide = ERR_NO_ERR End Function 'メイン関数 Sub main() Dim ret As Double Dim errNo As Integer errNo = divide(1, 0, ret) If errNo <> ERR_NO_ERR Then Debug.Print "エラーが発生しました" Exit Sub End If Debug.Print ret End Sub |
module2 |
Option Explicit Type ErrInformation 'エラー情報を格納するユーザー定義型 Public Const ERR_NO_ERR As Integer = 0 '正常終了 'x÷yを計算し、結果を返します 'メイン関数 |
module3 |
Option Explicit 'x÷yを計算し、結果を返します 'メイン関数 ErrorHandler: End Sub |
例外の伝播の方法 | 戻り値(int型)で例外を返す | out引数で例外を返す | 例外オブジェクトをスローする |
伝播の方法のわかりやすさ |
○ |
○ |
△ |
コードの可読性 |
× |
× |
○ |
その他 | ×:エラー処理をしなくてもコンパイルエラーにならないので、漏れの発見が遅れる × :エラーコードの管理が面倒 × :保持できる情報量が少なすぎ |
×:エラー処理をしなくてもコンパイルエラーにならないので、漏れの発見が遅れる | ○:Javaの場合、エラー処理をしていなかった場合コンパイルエラーとなるので、漏らすことがない |
番号 |
リンク先の名称 |
リンク先の説明 |
リンクした日 |
1 | 例外処理 - Wikipedia | 例外処理についての説明があります | 2009/5/5 |
2 | JNI実験ページ | JNIでのエラー処理方法が書いてあります | 2009/5/5 |
3 | EC++ Japanese Home Page | 組み込み用C++のページです | 2009/5/5 |
4 | エラー処理とログ出力 | エラー処理についていろいろ書かれています | 2009/5/5 |