Ensures that one or more statements are always executed after a Try statement finishes.
Finally Statement
Finally
{
Statements
}
Finallyの使用はすべて、その上のTry文(任意のCatchや Elseの後)に属する(関連付けられる)ものでなければなりません。Finallyは、ブロックを使ってその動作を変更しない限り、常にその上にある最も近い未取得のTry文に属す。
Try文は、Catchや Finallyがあるかどうかで動作が異なります。詳しくは、Tryをご覧ください。
Tryブロック中の制御フローステートメントを抑制するため、Goto、Break、ContinueまたはReturnでは、Finallyブロックを抜け出すことはできません。例えば、tryが return 42を使用したときは、finallyブロックが実行された後に値42が返されます。これらの文を使ってFinallyブロックから抜け出そうとときは、可能であればロード時に、そうでなければランタイム時にエラーとして検出されます。
トレイメニューやExitAppなど、何らかの手段でスクリプトを直接終了させた場合は、Finally文は実行されません。
OTB(One True Brace)スタイルは、オプションでfinally文を使用することができる。事例:
try {
...
} finally {
...
}
try {
...
} catch {
...
} else {
...
} finally {
...
}
try
{
ToolTip "Working..."
Example1()
}
catch as e
{
; e が含むオブジェクトの詳細については、Errorを参照してください。
MsgBox(Type(e) " thrown!`n`nwhat: " e.what "`nfile: " e.file
. "`nline: " e.line "`nmessage: " e.message "`nextra: " e.extra,, 16)
}
finally
{
ToolTip ; hide the tooltip
}
MsgBox "Done!"
; この関数は、クリーンアップコードとして機能するFinallyブロックを備えています。
Example1()
{
try
Example2()
finally
MsgBox "This is always executed regardless of exceptions"
}
; 分数が奇数のときは、この関数はエラーになります。
Example2()
{
if Mod(A_Min, 2)
throw Error("That's odd...")
MsgBox "Example2 did not fail"
}