比較命令

比較命令を次の表に示します。

表 1. 比較命令
命令 従来型の構文 自由形式構文
かつ ANDxx (かつ) AND 演算子
比較 COMP (比較) =、<、>、<=、>=、または <> 演算子
比較および分岐 CABxx (比較および分岐) (許可されていない)
条件付きサブルーチン CASxx (サブルーチンの条件付き呼び出し) IF (If) および EXSR (サブルーチンの呼び出し)
条件までの繰り返し DOU (条件が真になるまでの繰り返し) または DOUxx (条件までの繰り返し) DOU (条件が真になるまでの繰り返し)
条件の間繰り返し DOW (条件が真の間繰り返し) または DOWxx (条件が真の間繰り返し) DOW (条件が真の間繰り返し)
IF/THEN IF (If) または IFxx (満たされた条件の処理) IF (If)
または ORxx (または) OR 演算子
真の場合に選択 WHEN (真の場合に選択) または WHENxx (真の場合に選択) WHEN (真の場合に選択)
ANDxx、CABxx、CASxx、DOUxx、DOWxx、IFxx、ORxx、および WHENxx 命令に おける xx には、以下を使用することができます。
xx
意味
GT
演算項目 1 は演算項目 2 より大きい。
LT
演算項目 1 は演算項目 2 より小さい。
EQ
演算項目 1 は演算項目 2 と等しい。
NE
演算項目 1 は演算項目 2 と等しくない。
GE
演算項目 1 は演算項目 2 より大きいか等しい。
LE
演算項目 1 は演算項目 2 より小さいか等しい。
ブランク
無条件実行 (CASxx または CABxx)。

比較命令では、フィールドの命令で指定された条件がテストされます。これらの命令ではフィールドの値は変更されません。 COMP、CABXX、および CASXX の場合には、71 桁と 76 桁に割り当てられた結果 の標識がこの命令の結果に従って設定されます。 すべてのデータ・タイプが、同じデータ・タイプのフィールドと比較されます。

比較命令の使用にあたっては、以下のことを忘れないでください。
  • 数値フィールドが比較される場合には、長さが等しくないフィールドは暗 黙の小数点に位置合わせされます。 各フィールドには、フィールドの長さと小数点以下の桁数を同じにして比較で きるように、小数点の左または右にゼロが埋められます。
  • 数値の比較はすべて代数で行われます。 プラス (+) の値は常にマイナス (-) の値より大きくなります。
  • プログラムのコンパイルで FIXNBR(*ZONED) 制御仕様書の キーワードまたはコマンド・パラメーターが使用されている場合には、 ゾーン数値フィールド内のブランクはゼロと見なされます。
  • 文字フィールド、図形フィールド、または UCS-2 フィールドが比較される場合には、長さが等しくないフィールドはその左端文字に位置合わせされます。短いフィールドには、フィール ドの長さを同じにして比較できるように、長い方のフィールドの長さに等しく なるまでブランクが埋められます。
  • 日付フィールドは、比較するときに共通の形式に変換されます。
  • 比較する時に時刻フィールドは共通の形式に変換されます。
  • 配列名は比較命令では指定できませんが、配列要素は指定することが できます。
  • DOUxx、DOWxx、IFxx、および WHENxx 命令と一緒に ANDxx および ORxx 命 令を使用することができます。
  • 長さがゼロの文字リテラル、図形リテラル、または UCS-2 リテラルを、ブランクを含んでいるフィールド (固定または可変) と比較した結果は、等しくなります。 値の長さが 0 であるかどうかをテストするには、%LEN 組み込み関数を使用してください。 例については、図 1 を参照してください。

注意!

予測できない結果を避けたい場合には、特に次の点に注意してください。
  • UCS-2 データにおける文字の順序は、文字または図形データに関するものであるため、必ずしも同じになるわけではありません。 例えば、UCS-2 の場合は '2' が 'A' より小さくなりますが、文字比較の場合は '2' が 'A' より大きくなります。 比較演算において UCS-2 への暗黙的な変換が実行される場合や、文字タイプまたは図形タイプではなく UCS-2 タイプとなるようにフィールドの一部を変更した場合には、大なり比較または小なり比較の結果が、期待したものとは異なることがあります。
  • すべての図形および UCS-2 の比較はデータの 16 進数表現を使用して 実行されます。 代替順序は使用されません。
  • 文字フィールドの比較に (制御仕様書の ALTSEQ {(*NONE | *SRC | *EXT) }キーワード を使用して) 代替照合順序が指定されている場合には、被比較数は 代替照合順序に変換されてから比較されます。比較に *HIVAL または *LOVAL が 使用されている場合には、比較操作の前に代替照合順序によって値が変更される 場合があります。 いずれかの被比較数が定義仕様書の ALTSEQ(*NONE) キーワードによって 定義されている場合、代替照合順序は使用されないことに注意してください。
  • 基底ポインターを *NULL (または値が *NULL の基底ポインター) と比較する 場合に、予測可能な結果が得られる唯一の比較は等号および不等号についての 場合だけです。
  • より小またはより大のポインターを比較する時に予測可能な結果が得られ るのは、ポインターが連続記憶域内のアドレスを指示している場合だけです。 例えば、すべてのポインターが 1 つの *USRSPC の複数のアドレスに設定され ているか、またはすべてのポインターが 1 つの配列の複数の配列要素のアドレス に設定されている場合です。
  • プロシージャー・ポインター・フィールドが等号または不等号以外のもの について比較されると、結果は予測できないものとなります。
  • 浮動値は等号または不等号について比較しないでください。その理由は 浮動値の保管方法にあります。 このような比較をする代わりに、2 つの値の差の絶対値を、非常に小さい値と比較します。