Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ZQUIT (従来のコマンド)

エラー処理でプログラムを終了します。

Synopsis

ZQ:pc expression

引数

pc オプション — 後置条件式
expression オプション — 0 より大きな整数に評価される式

説明

Caché プラットフォームは、ZQUIT に対する ZQ という省略形のみ認識します。

Note:

このページでは、従来の ZQUIT コマンドについて説明します。ZQUIT コマンドは Caché 5.1 時点で従来のバージョンと見なされるもので、新規のプログラミングでは使用すべきではありません。ここでは、従来のアプリケーションとの互換性について説明します。新規のプログラミングでは、$ZERROR 引数を持つ ZTRAP コマンドを使用して、エラー・ハンドラ間で制御を渡せるようにする必要があります。新しいプロシージャ・コードで ZQUIT コマンドを使用すると、<COMMAND> エラーとなります。詳細は "ZTRAP" コマンドを参照してください。

ZQUIT コマンドは、コード化されたルーチンを終了し、エラー処理に対する明示的な制御を提供します。

DOFORXECUTE の各コマンドが実行されたり、ユーザ定義関数が呼び出されたりするたびに、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 ハンドラに制御を転送することができます。

Note:

既定の ProcedureBlock 属性を持つプロシージャ、またはオブジェクト・メソッド内で、間接の GOTO (例えば ZQ 1 GOTO @$ZT) を使用しないでください。これは、GOTO を使用してプロシージャを終了できないため、コンパイル・エラーが発生します。この文を使用するルーチンを終了しても、プロシージャに変換されることはありません。この文を使用するオブジェクト・メソッドは、ProcedureBlock 属性から除外される必要があります。

このエラー・リターン・シーケンスは、以下の方法のうちのいずれかで ZQUIT を使用することによって、変更することができます。

  • ZQ 1 QUIT — 前のエラー・トラップを設定したサブルーチンの呼び出し側に戻します。

  • ZQ 1 GOTO @$ZT — 前のエラートラップ・ルーチンを呼び出します (上記のメモを参照してください)。

  • ZQ QUIT — アプリケーションを停止するか、空のプログラム・スタックでプログラマ・モードに入ります。ZQUITQUIT の間には 2 つのスペースを入れてください。

  • ZQ GOTO ^routine — プログラム・スタックをクリアして、通常は関数ドライバである指定されたトップ・レベル・ルーチンで実行を再び開始します。ZQUITGOTO の間には 2 つのスペースを入れてください。

関連項目

FeedbackOpens in a new tab