If

IFコマンドは、行にある残りのコマンドの条件付き実行を提供します。IFが引数を持つ場合、それは、その評価される引数の真偽値を持つ$TESTを更新します。$TESTが1(TRUE)の時、GT.Mは、IFステートメントの後の行の残りの部分を実行します。$TESTが0(FALSE)である場合、GT.Mは、行の残りの部分は実行されません。

IFコマンドのフォーマットは:

I[F] [tvexpr[,...]]
[注意] 注意

タイムアウトを指定したコマンドも$TESTを維持します。$TESTの情報については、 第8章: " 固有の特殊変数" の章を参照してください。GT.Mは、外部関数または引数なしのDOコマンドの実行だけの時に$TESTをスタックするので、任意のXECUTEまたは引数ありDOは、$TESTを変更することの潜在的な副作用があります。

慎重に、引数なしのIFを使用してください。

例:

IF A,B ...
is equivalent to
IF A IF B

複数の引数を持つIFは、それらの引数が論理的に"AND"されたときと同様に振舞います。しかし、行の実行は、最初の false 引数の評価を終わらせます。"AND" 演算子(&)を含むIFの引数式のために、実行は最初の false 引数の評価によってそれでも停止します。式の内にある任意のグローバル参照は、ネイキッドリファレンスを維持するためにシーケンス内に作用します。

後置条件は、IFと同様の機能を実行しますが; しかし、その範囲は、単一のコマンドまたは引数に制限されていて、それらは$TESTを変更しません。後置条件の詳細については、第5章: “Mの一般的な言語特徴を参照してください。

Ifの例

例:

IF x=+x!(x="") Do BAL

この例では、もし x が数値または nul l文字列の場合、DOが実行されます。

例:

Write !,?50,BAL If 'BAL Write "****"
IF  Set EMPTY(acct)=""

最初の行にある IF は、2行目の引数なしIFに続くコードの実行を決定する$TESTの値を変更します。そのような引数なしのIFは、行の継続のフォームとして機能することができます。

例:

GTM>Set X=1,Y=1,Z=2 Kill UNDEF
GTM>If X=1,Y=1,Z=3,UNDEF=0 Write "HI"
GTM>

IFコマンドは、Zが3(3)に等しくないと判断した後に、行の実行を停止するGT.Mを引き起こします。したがって、GT.Mは未定義変数へのリファレンスをけっして評価しませんし、けっしてエラーを生成しません。

例:

GTM>Set X=1 Kill UNDEF
GTM>If X=1!(UNDEF=3) Write "HI"
HI
GTM>

GT.Mは、X=1を満たすIFを認識しているので、それはUNDEF変数の評価をスキップし、エラーを生成しないこのIFコマンドを実行します。GT.Mは、そのような最適化を必要としないし、実際には、すべてのグローバル参照がネイキッドインジケータを維持することを要求することによってそれらを抑制しないので、他の実装はエラーを生成することがあります。

inserted by FC2 system