「Exit Function」ステートメントが複数ある関数を書きたいと思います。終了機能を実行する前に、クリーンアップ コードが常に実行されるようにする方法はありますか?
これが私が実際にやろうとしていることです。テスト自動化プロジェクトで、関数のコードが開始される前に特定の関数を実行し、関数を終了する前に別の関数を実行するという標準を設定したいと考えています。これを行う簡単な方法はありますか?
VBScriptでは関数を関数でラップするのは簡単ではないため(パラメーターの受け渡しの問題が予想されます)、次のクラスを使用する必要があります。
Class cWrap
Private m_sName
Public Function init(s)
Set init = Me
m_sName = s
WScript.Echo "*** enter", m_sName
End Function ' init
Private Sub Class_Terminate()
WScript.Echo "*** leave", m_sName
End Sub ' Class_Terminate
End Class ' cWrap
Function f1(n)
f1 = "f1 called"
Dim o : Set o = New cWrap.init("f1")
End Function ' f1
Function f2(n)
f2 = "f2 called"
Dim o : Set o = New cWrap.init("f2")
End Function ' f2
Ekkehard.Horner のラッパー クラスは、ストップウォッチ、ランスタック ビューアー、または err オブジェクトの例外トラップなど、関数の範囲外で実行する必要がある場合に非常に役立ちます。ただし、関数のスコープ内で行うことがあり、ラッパー クラスが役に立たない場合は、次のDo Loop While False
パターンの使用を検討できます。
Function DoSomeMessyStuff()
Do
call doStuff()
If somecondition Then Exit Do
call doMoreStuff()
If somecondition Then Exit Do
call doEvenMoreStuff()
If somecondition Then Exit Do
call andEvenMoreStuffHere()
Loop While False ' Always exits
' Finally:
call cleanUpTheMess()
End Function