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

おわりに

これまで、ラベル名に、ExitProcErrHandlerを使っていましたが、これからは、EatTravelを使うことを推奨します。

Go To キャンペーン


出典:https://www.gfo-sc.jp/gototraveleat/