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" }