GoToを禁止にされると困ること
**VB(A)**をお使いのみなさん、GoTo使用禁止で、困っていませんか。
GoToの使用を禁止にすると、
OnError.bas
On Error Resume Next
とするしかなく、次のようなエラーチェックを大量にコーディングする必要があります。
ErrHandling.bas
dim hasErr as Boolean
hasErr = False
If Not hasErr Then
' コーディング
end if
If Err.Number <> 0 Then
hasErr = True
' 例外発生時の処理
End if
If Not hasErr Then
' コーディングの続き
end if
If Err.Number <> 0 Then
hasErr = True
' 例外発生時の処理
End if
・
・
・
コードの可読性が低下し、不具合(バグ)を誘発しかねません。
ベストプラクティス - VB(A)の例外処理
- GoTo文は原則禁止とします。
- ただし、イベントハンドラ等のSubプロシージャ内であれば、
On Error GoTo - Resume
の組み合わせで最大限の警戒をもって使用することを推奨します。
snipet.bas
Sub button_Click()
On Error GoTo Travel
' ここにコーディングしてください。
Eat:
' 後処理があればここにコーディングしてください。
' (例外が発生しそうな場合は、 On Error Resume Next で、例外処理を行ってください。)
Exit Sub
Travel:
' 例外発生時の処理があればここにコーディングしてください。
' ※ Errオブジェクトはシングルトンですので、別のサブルーチンや関数を呼び出すと、
' その中で、Errオブジェクトの内容が変化してしまうことがあります。
MsgBox Err.Description, vbCritical, "予期せぬエラー [" & Err.Number & "]"
Resume Eat
End Sub
おわりに
これまで、ラベル名に、ExitProc
やErrHandler
を使っていましたが、これからは、Eat
やTravel
を使うことを推奨します。