ZQUIT (従来のコマンド)
Synopsis
ZQ:pc expression
引数
pc | オプション — 後置条件式 |
expression | オプション — 0 より大きな整数に評価される式 |
説明
Caché プラットフォームは、ZQUIT に対する ZQ という省略形のみ認識します。
このページでは、従来の ZQUIT コマンドについて説明します。ZQUIT コマンドは Caché 5.1 時点で従来のバージョンと見なされるもので、新規のプログラミングでは使用すべきではありません。ここでは、従来のアプリケーションとの互換性について説明します。新規のプログラミングでは、$ZERROR 引数を持つ ZTRAP コマンドを使用して、エラー・ハンドラ間で制御を渡せるようにする必要があります。新しいプロシージャ・コードで ZQUIT コマンドを使用すると、<COMMAND> エラーとなります。詳細は "ZTRAP" コマンドを参照してください。
ZQUIT コマンドは、コード化されたルーチンを終了し、エラー処理に対する明示的な制御を提供します。
DO、FOR、XECUTE の各コマンドが実行されたり、ユーザ定義関数が呼び出されたりするたびに、Caché はプログラム・スタック (コール・スタックと呼ばれることもある) に戻り、情報を配置します。ZQUIT は、入れ子にされたエラー処理ルーチンが、より高いレベルのエラー・ハンドラに制御を渡せるようなメカニズムを提供します。ZQUIT は、エラー条件を再び信号で送り、Caché がプログラム (コール) ・スタックを戻すようにします。
ZQUIT は、QUIT コマンドに類似していますが、エラー処理には明示的な制御を提供します。QUIT コマンドとは異なり、ZQUIT はコード化されたルーチンでのみ使用することができます。ZQUIT がプログラマ・プロンプトから入力された場合、Caché はZQUIT を無視します。
ZQUIT には、以下の 2 つの形式があります。
-
引数なし
-
引数付き
引数なしの ZQUIT
引数なしの ZQUIT は、スタック全体をクリアします。
引数付きの ZQUIT
ZQ expression は、$ZTRAP エラー・ハンドラでスタックを別のコール・スタック・レベルへ戻します。expression の値は、ZQUIT が戻すハンドラ指定スタック・レベルの数を指定します。expression に 1 を使用している場合、Caché はスタックを最初に遭遇する $ZTRAP ハンドラに戻します。expression に 2 を使用している場合、Caché はスタックを2番目に遭遇する $ZTRAP ハンドラに戻します。
引数
pc
オプションの後置条件式です。Caché は、後置条件式が True (0 以外の数値) の場合にこのコマンドを実行します。Caché は、後置条件式が False (0) の場合はコマンドを実行しません。詳細は、"Caché ObjectScript の使用法" の "コマンド後置条件式" を参照してください。
expression
0 より大きな整数に評価される有効な任意の ObjectScript 式。Caché プラットフォームは、$ZTRAP の設定を使用して、プログラム・スタックを結果の整数によって示される設定に戻します。
例
以下は、レコードを x に読み取り、テープマーク (予想されるエラー) を読み取った場合にはテープマーク・フラグ (tm)、True (1) を返し、呼び出し側のエラートラップ・ルーチンがある場合には、それに他のエラーを処理させる磁気テープ読み取りルーチンの例です。
Mtread
SET $ZTRAP="Mterr"
USE 47
READ x
SET tm=0
QUIT ; Normal return
Mterr
IF $ZERROR?1"<MAGTAPE>" ; Pattern matching: repcount stringliteral
{ } ; Automatic branch to error-trap handler
ELSE { SET tm=123 }
IF tm=1 { QUIT }
ELSE {ZQ 1 }
IF $ZTRAP'="" {GOTO @$ZTRAP} ; To caller's error routine
ELSE
{ ; No caller's error routine
USE 0
WRITE !,$ZERROR ZQ
QUIT
}
メモ
引数なしの ZQUIT の振る舞い
引数なしで指定された場合、ZQUIT はスタック全体を戻します。実行は、プログラマ・モードあるいはアプリケーション・モードのいずれかで、主プログラム・レベル、つまりジョブが開始したレベルで開始します。
ZQUIT は、制御の流れを変更しません。実行は、ZQUIT に続く ObjectScript コマンドで継続します。M/11 のエラー・トラップ動作を模倣するには、エラー処理ルーチンは、以下のコマンドで終了する必要があります。
ZQ QUIT
ZQ の後には、2 つのスペースが配置されていることに注意してください。
QUIT コマンドは、ジョブがプログラマ・モードで開始している場合はプログラマ・モードに戻り、ジョブがアプリケーション・モードで開始している場合には終了します。アプリケーション・エラーを記録するには、エラートラップ・コードを以下のように終了します。
ZQ GOTO ^%ET
ここでも、ZQ の後には、2 つのスペースが配置されていることに注意してください。
引数付きの ZQUIT の振る舞い
引数付きの ZQUIT を指定した場合、ZQUIT はスタック全体をクリアしませんが、$ZTRAP 特殊変数が設定されたレベルまで、1 つ、または複数レベル戻します。レベルの数は、0 よりも大きい整数に評価される expression 引数によって指定される必要があります。$ZTRAP は、それが設定されたルーチンへ、エラー・トラップを送ります。
次に例を示します。
ZQ 1
これにより、$ZTRAP が設定されたレベルにスタックが戻ります。"2" の引数を ZQUIT に渡すと、$ZTRAP が設定された 2 番目から最後のレベルに戻ります。
Caché は、現在 $ZTRAP で設定されている、エラートラップ・ルーチンを含む実行レベルでプログラムを実行します。そのエラートラップ・ルーチンが終了すると、コントロールは、$ZTRAP が設定されたサブルーチンが QUIT した場所へ戻ります。
Caché が、指定された $ZTRAP エラー・ハンドラのスタック・レベルに到着する前のスタック・レベルで、$ETRAP 特殊変数によって指定されたエラー・ハンドラを見つけた場合、Caché はその $ETRAP エラー・ハンドラに制御を渡します。$ETRAP エラー・ハンドラがそのエラーを解消することができない場合、元の ZQUIT を発行した $ZTRAP エラー・ハンドラが再び制御を得ます。その時点で、$ZTRAP エラー・ハンドラは GOTO コマンドを使用して、最初に指定されていた $ZTRAP ハンドラに制御を転送することができます。
既定の ProcedureBlock 属性を持つプロシージャ、またはオブジェクト・メソッド内で、間接の GOTO (例えば ZQ 1 GOTO @$ZT) を使用しないでください。これは、GOTO を使用してプロシージャを終了できないため、コンパイル・エラーが発生します。この文を使用するルーチンを終了しても、プロシージャに変換されることはありません。この文を使用するオブジェクト・メソッドは、ProcedureBlock 属性から除外される必要があります。
このエラー・リターン・シーケンスは、以下の方法のうちのいずれかで ZQUIT を使用することによって、変更することができます。
-
ZQ 1 QUIT — 前のエラー・トラップを設定したサブルーチンの呼び出し側に戻します。
-
ZQ 1 GOTO @$ZT — 前のエラートラップ・ルーチンを呼び出します (上記のメモを参照してください)。
-
ZQ QUIT — アプリケーションを停止するか、空のプログラム・スタックでプログラマ・モードに入ります。ZQUIT と QUIT の間には 2 つのスペースを入れてください。
-
ZQ GOTO ^routine — プログラム・スタックをクリアして、通常は関数ドライバである指定されたトップ・レベル・ルーチンで実行を再び開始します。ZQUIT と GOTO の間には 2 つのスペースを入れてください。