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の文を実行します。