Finally

Stellt sicher, dass nach Abschluss einer Try-Anweisung immer eine oder mehrere Anweisungen ausgeführt werden.

Finally Anweisung
Finally
{
    Anweisungen
}

Bemerkungen

Jedes Finally muss zu einem darüber liegenden Try gehören (mit ihm verbunden sein) (nach einem optionalen Catch und/oder Else). Ein Finally bezieht sich immer auf das nächstmögliche unbeanspruchte Try über ihm, es sei denn, ein Block wurde verwendet, um dieses Verhalten zu ändern.

Das Verhalten von Try hängt davon ab, ob ein Catch oder Finally vorhanden ist. Weitere Informationen finden Sie unter Try.

Goto, Break, Continue und Return können nicht verwendet werden, um einen Finally-Block zu verlassen, da sonst jegliche Kontrollanweisungen innerhalb eines Try-Blocks unterdrückt werden müssten. Wenn Try beispielsweise return 42 verwendet, wird der Wert 42 erst nach der Ausführung des Finally-Blocks zurückgegeben. Der Versuch, mit einer dieser Anweisungen aus einem Finally-Block herauszuspringen, wird als Fehler erkannt, wenn das Skript geladen wird, sofern möglich, andernfalls während der Skriptausführung.

Finally-Anweisungen werden nicht ausgeführt, wenn das Skript direkt terminiert wird, z.B. über das Tray-Menü oder ExitApp.

Je nach Bedarf kann der One True Brace (OTB) Style bei einem Finally verwendet werden. Zum Beispiel:

try {
    ...
} finally {
    ...
}

try {
    ...
} catch {
    ...
} else {
    ...
} finally {
    ...
}

Try, Catch, Else, Throw, Blöcke

Beispiele

Zeigt detailliert das Verhalten von Finally.

try
{
    ToolTip "Bearbeite ..."
    Beispiel1()
}
catch as e
{
    ; Um mehr über das Objekt zu erfahren, das in e enthalten ist, siehe Error.
    MsgBox(Type(e) " ausgelöst!`n`nWas: " e.what "`nDatei: " e.file
        . "`nZeile: " e.line "`nNachricht: " e.message "`nZusatz: " e.extra,, 16)
}
finally
{
    ToolTip ; Versteckt den Tooltip
}

MsgBox "Fertig!"

; Diese Funktion hat einen Finally-Block, der als Aufräumcode fungiert
Beispiel1()
{
    try
        Beispiel2()
    finally
        MsgBox "Dies wird immer ausgeführt, unabhängig von Ausnahmen"
}

; Diese Funktion schlägt fehl, wenn die Minuten ungerade sind
Beispiel2()
{
    if Mod(A_Min, 2)
        throw Error("ungerade...")
    MsgBox "Beispiel2 ist nicht fehlgeschlagen"
}