GoToは最大限の警戒をもって使用します(原則禁止)
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
おわりに
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
を使うことを推奨します。
Go To キャンペーン
Author And Source
この問題について(GoToは最大限の警戒をもって使用します(原則禁止)), 我々は、より多くの情報をここで見つけました https://qiita.com/jp-96/items/c150b8461241ac6afde2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .