TRY文の構文は以下のとおりです。
TRY 複文1 EXCEPT 複文2 FINALLY 複文3
EXCEPTとFINALLYはどちらか最低一つ必要で、TRYだけの指定はエラーになります。また両方指定する場合はEXCEPTを先に指定する必要があります。
このTRY文は各種リソースの保護のために存在します。
例)
#SUB Foo() {
TRY {
MakeResponseFile($workfile);
/* 重要な処理 */
IF (#sts!=0) THEN { ExitProc(); }; // 何か問題があって終了
/* 処理の続行 */
}
FINALLY {
Delete($workfile); // $workfileを削除
};
}
#stsが0以外だった場合、ExitProc()のあと、FINALLYで指定されたDelete($workfile)を実行してからFoo()を抜けます。
#stsが0だった場合は/* 処理の続行 */を実行してからDelete($workfile)を実行してFoo()を抜けます。
例)
TRY {
#i=#GlobalValue*#j;
IF (#i!=0) THEN { Raise('? unknown value',1); };
#GlobalValue=#j+1;
}
EXCEPT { // #iが0以外のときに実行される
ShowMessage('Get User Exception','test',0);
};
#iが0以外だった場合、EXCEPTで指定された文を実行します。
0だった場合は #GlobalValue=#j+1; を実行して、次のEXCEPTで指定された文は実行されません。
例)
TRY {
IF ($SvMsg!='') THEN { $SvMsg=''; };
/* 前の処理 */
IF (#sts==0) THEN {
$Msg='Unkown Operation';
#WorkStatus=#j;
ExitProc();
};
/* 後の処理 */
}
EXCEPT {
ShowMessage($Msg,'Exception',0);
}
FINALLY {
$SvMsg=$Msg;
};
#stsが0の時は、/* 後の処理 */を飛び越してEXCEPTの文、FINALLYの文を順に実行します。
#stsが0以外のときは/* 後の処理 */を実行した後、EXCEPTは実行せず、FINALLYの文を実行します。