<<< 前へ   TOP   次へ>>>


TRY文

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


<<< 前へ   TOP   次へ>>>