0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GoToは最大限の警戒をもって使用します(原則禁止)

Posted at

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 キャンペーン

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?