条件式(conditional expression)は、実行用プログラムの流れを制御する条件を表わす。条件を評価した結果の真理値に応じて、プログラムの処理の経路が選択される。条件式は、
EVALUATE(評価)、
IF(判断)、PERFORM(実行)、SEARCH(表引き)の各文の中に指定する。条件式は単純条件と複合条件に分類される。どちらの種類の条件も、任意の数のかっこで囲むことができる。かっこで囲んでも、条件の種類は変わらない。
OSVSシステム指令を設定した場合、条件式の中で部分参照を行うことはできない。
単純条件(simple condition)には、比較条件、字類条件、条件名条件、スイッチ状態条件、符号条件がある。単純条件は真理値として、「真」または「偽」のどちらかをとる。単純条件をかっこで囲んでも、真理値は変わらない。
比較条件(relation condition)は、2つの作用対象を比較する。各作用対象には、一意名によって参照されるデータ項目、定数、算術演算によって算出される値を使用できる。比較条件は、作用対象の間に関係が成立するときに、真理値「真」をとる。2つの数字作用対象を、それぞれのUSAGE句に指定されている形式に関係なく、比較できる。その他の比較においては、作用対象の用途は同じでなければならない。作用対象のどちらかが集団項目である場合は、文字の比較規則が適用される。
文字定数をかっこで囲むことができる。
比較条件の一般形式は下記のとおり。
比較文字の">" , "<", "=" は必要語であるが、下線が引かれていないことに注意。これは、"≧" のような他の記号との混同を避けるためである。
" = TO"と " > THAN" と " <
THAN" も使用できる。
最初の作用対象(一意名-1、定数-1、算術式-1)を、条件の左辺(subject of condition)と呼ぶ。2番目の作用対象(一意名-2、定数-2、算術式-2)を条件の右辺(object of condition)と呼ぶ。比較条件では少なくとも1つの変数を参照しなければならない。
比較演算子(relational operator)は、比較条件の中で行う比較の種類を指定する。比較演算子としての予約語は、前後を空白で区切らなければならない。 必要語または比較文字の前に"NOT" を付けたものは、1つの比較演算子である。たとえば、"NOT EQUAL" は「等しくない」ことを「真」とすることを表わし、"NOT GREATER" は「以下である」ことを「真」とすることを表わす。各比較演算子の意味を表 10-2に示す。
下記の比較演算子は同義であり、どちらを書いてもよい。:
IS EQUAL TO | と | EQUALS; |
IS NOT EQUAL TO | と | IS UNEQUAL TO; |
IS GREATER THAN | と | EXCEEDS; |
IS NOT GREATER THAN | と | IS LESS THAN OR EQUAL TO; |
IS NOT LESS THAN | と | IS GREATER THAN OR EQUAL TO. |
意味
|
比較演算子 |
---|---|
「より大きい」または「以下」 | ![]() |
「より小さい」または「以上」 | ![]() |
「等しい」または「等しくない」 | ![]() |
「より大きい」または「等しい」 | ![]() |
「より小さい」または「等しい」 | ![]() |
「等しい」 | ![]() |
「等しくない」 | ![]() |
「より大きい」 | ![]() |
必要な比較記号、 '<'、'>'、および '=' に下線が引かれない。 これは、"≧" (「以上」)のような他の記号との混同を避けるためである。 |
字類が数字の作用対象に関しては、その代数値が比較される。定数または算術式を表わす数字の数は意味をもたない。ゼロは符号が付いていても付いていなくても、1つの値とみなされる。
これらの作用対象は、その用途がどのように記述されているかにかかわらず、比較することが許される。符号の付いていない数字作用対象は、比較上は、正の数として扱われる。
数字編集項目は、字類が英数字であり、これらの項目は、以下に示す文字作用対象の比較規則に従って比較される。
文字作用対象どうしの比較、または1つの数字作用対象と1つの文字作用対象の比較は、指定されている文字の照合順序に基づいて行われる。 (環境部の章の実行用計算機段落実行用計算機段落節を参照。) 一方の作用対象が数字である場合、整数データ項目または整数定数にする。そして、下記のことに注意する。 実行用計算機段落
作用対象の大きさは、作用対象中の標準データ形式文字の合計数である。
表意定数を持つ数字編集データ項目を比較することができる。これは英数字比較として扱われる。
用途が違っていても、数字作用対象と文字作用対象を比較できる。数字作用対象は、標準データ形式で同じ大きさのUSAGE
DIAPLAY項目に転記されたように扱われる。そして、この内容が文字作用対象と比較される。
比較処理は2つの場合に分けられる。
不一致であった最初の対応する文字は、文字の照合順序を比較される。そして、照合順序の大きい方の文字を含む作用対象の方が大きい作用対象であるとみなされる。
下記の項目の間でだけ、比較できる。
用途が明示的にまたは暗黙的に、ポインターとされている2つのデータ項目を比較できる。ポインターの比較では、等しいか等しくないかだけを検査する比較演算子だけを使用できる。
用途が手続きポインターである、2つのデータ項目を比較できる。
2つのオブジェクト参照を比較して、同じオブジェクトを参照しているかを確認できる。
字類条件(class condition)は、作用対象が数字であるか英字であるか、
あるいは、小文字の英字であるか、大文字の英字であるか、環境部の特殊名段落中にCLASS句によって指定されている文字集合に属する文字だけが含まれるかを、判定する。
小文字のa, b, c, ...z、
または大文字
と小文字
および空白の任意の組合わせから構成される場合、作用対象は英字である。
COMPUTATIONAL、COMPUTATIONAL-X、
COMPUTATIONAL-3、
COMPUTATIONAL-5、
またはPACKED-DECIMAL
のいずれかとする。
または各国語型関数
を参照しなければならない。
NOTを指定した場合、NOTとこれに続く語は、真理値を導くための字類検査を定義する 1つの字類条件となる。例えば NOT NUMERICは、作用対象が文字であるかを判断する真偽検査である。字類条件が語NOTを含んでいて、一意名-1が長さゼロの集団項目である場合、字類検査の結果は常に真となる。
NUMERIC検査を、データ記述項に演算子が記述されている基本項目から成る集団項目に対して使用できる。
および小文字の英字"a"から"z"
と空白の任意の組合わせで構成されているときだけである。
外部浮動小数点数項目(USAGE DISPLAY)および内部浮動小数点数項目(USAGE
COMP-1およびUSAGE COMP-2)には、字類条件を使用できない。
条件名条件(condition-name condition)は、条件変数(condition variable)の値が条件名に対応する値のいずれかと等しいか否かを判定する。
スイッチ状態条件(switch-status condition)は、
9つある
COBOLスイッチのそれぞれが「オン」の状態にあるか「オフ」の状態にあるかを判定する。
スイッチには、順にSWITCH-0からSWITCH-8という名前が付けられている。
それらの各スイッチの値(「オン」と「オフ」)は、COBOL実行用プログラムの実行を開始するときに、操作員によって設定される。(ランタイム スイッチの詳細については、COBOLシステムのマニュアルを参照。) 条件名に対応するスイッチと「オン」または「オフ」状態は、環境部の特殊名段落の中で定義しておく。環境部の章の特殊名段落特殊名段落節を参照。
条件名に定義されている状態にスイッチが設定されていると、検査の結果は真となる。
コンパイラ指令 SWITCH-TYPE を初期値の 1に設定すると、スイッチを設定するランタイム要素の内部からCOBOLスイッチが設定されているかどうかをテストする以外に、スイッチ状態条件を使用することはできない。
コンパイラ指令 DIALECT が ISO2002に設定されると、コンパイラ指令 SWITCH-TYPEが 2に設定される。この場合、実行単位のいずれかのランタイム要素の内部からCOBOLスイッチが設定されているかどうかをテストする以外に、スイッチ状態条件を使用することはできない。
正負条件(sign condition)は、算術式の値が正か負かゼロかを判定する。 正負条件の一般形式は以下のとおり。
正負条件の必要語に "NOT" を付けたものは、1つの正負条件である。この条件に照らして代数検査が行われ、真理値が求められる。たとえば、 "NOT ZERO" は作用対象の値がゼロでない(正または負) のときに真となる。作用対象は、値がゼロよりも大きいときに正であり、値がゼロよりも小さいときに負であり、値がゼロのときゼロである。算術式は、少なくとも1つの変数を参照しなければならない。
符号検査において、ZEROの代わりにZEROSまたはZEROESを使用できる。
省略引数条件で、関数、メソッド、またはプログラムに引数が与えられたかどうかが決定される。
データ名-1 IS [ NOT ] OMITTED
INSTANCE-OF条件は、オブジェクト参照が特定のクラスおよびインターフェイスのどちらのインスタンスであるかを決定する。
複合条件は、論理的結合子(論理演算子、"AND" および "OR")による単純条件、組み合わせ条件、および複合条件の結合、または、これらの条件の論理否定(論理演算子、"NOT")による否定で形成される。複合条件の真の値は、かっこに囲まれているかどうかにかかわらず、単純条件の個々の真の値に関する、記述されたすべての論理演算子の連携、または、論理的に結合または否定された条件の中間の真の値の結果である真の値である。
論理演算子およびその意味は以下のとおりである。
演算子
|
意味
|
---|---|
AND | 論理的な結合。真の値は、結合されている条件が真であれば、"真"。結合されている条件の片方または両方が偽であれば、 "偽"。 |
OR | 論理的な包含。真の値は、包含されている条件の片方または両方が真であれば、"真"。包含されている条件の両方が偽であれば、 "偽"。 |
NOT | 論理的な否定、または真の値の逆。 真の値は、条件が偽であれば、"真"。条件が真であれば、 "偽"。 |
論理演算子の前後には、空白を入れなければならない。
否定単純条件(negated simple condition)は、単純条件に論理演算子の"NOT" を付けたものである。否定単純条件は、単純条件の真理値を逆転させる働きをする。したがって、単純条件の真理値が「偽」のときに否定単純条件の真理値は「真」となり、単純条件の真理値が「真」のときに否定単純条件の真理値は「偽」となる。否定単純条件は、単純条件の真理値を逆転させる働きをする。したがって、単純条件の真理値が「偽」のときに否定単純条件の真理値は「真」となり、単純条件の真理値が「真」のときに否定単純条件の真理値は「偽」となる。否定単純条件をかっこで囲んでも真理値は変わらない。
組合せ条件(combined condition)は、論理演算子の"AND" または "OR" で条件をつないだものである。
表 10-3に、条件と条件演算子を結び付け、かっこで囲む有効な組合せを示す。左かっこと右かっこは1対1で対応し、左かっこが右かっこよりも左側にこなければならない。
要 素 | 条件式中の位置 | 直前にきてよい要素 | 直後にきてよい要素 |
---|---|---|---|
単純条件 | どこでも可 | OR, NOT, AND, ( | OR, AND, ) |
OR または AND | 最初と最後は不可 | 単純条件, ) | 単純条件, NOT, ( |
NOT | 最後は不可 | OR, AND, ( | 単純条件, ( |
( | 最後は不可 | OR, NOT, AND, ( | 単純条件, NOT, ( |
) | 最初は不可 | 単純条件, ) | OR, AND, ) |
表 からわかるとおり、"OR NOT" は許される組合せであるが、"NOT OR" は許されない組合せである。また、"NOT ( " は許されるが、 "NOT NOT " は許され ない)。
単純比較条件または否定単純比較条件を、論理結合語で組み合わせていくつも続けて書く場合、先行する比較条件と共通の左辺または左辺と比較演算子があり、かつかっこを使用していなければ、最初のものを除く共通の比較条件を省略できる。下記の2通りの方法がある。
一続きの比較条件の中で、上記の両方の形の省略方法を使用できる。略記した場合、先行する明記した最後の左辺が省略した左辺を補うように挿入され、先行する明記した最後の比較演算子が省略した比較演算子を補うように挿入される。 このように暗黙的に左辺および比較演算子が挿入された結果は、表 10-3の規則に合わなければならない。省略した左辺や比較演算子が補われるこの処理は、組合せ条件の中に略記しない単純条件が出てくると終了する。
条件が評価される順序を、かっこを使用することによって変更できる。(下記の例を参照)
略記組合せ比較条件の中で"NOT" を使用した場合、下記のように解釈される。
略記組合せ比較条件および略記否定組合せ条件と、それに相当する略さない形の例をいくつか下に示す。
略記組合せ比較条件
|
略さずに書いた場合
|
---|---|
a > b AND NOT < c OR d |
((a > b) AND (a NOT < c)) OR (a NOT < d) |
a NOT EQUAL b OR c |
(a NOT EQUAL b) OR (a NOT EQUAL c) |
NOT a = b OR c |
(NOT (a = b)) OR (a = c) |
NOT (a GREATER b OR < c) |
NOT ((a GREATER b) OR (a < c)) |
NOT (a NOT > b AND c AND NOT d |
NOT ((((a NOT > b) AND (a NOT > c)) AND (NOT (a
NOT > d)))) |
x > a OR y AND z |
x > a OR (x > y AND x > z) |
![]() |
x > a OR (x > y AND x > z) |
![]() |
(x > a OR x > y) AND x > z |
![]() |
x = a OR x > b |
![]() |
x = a AND ( x > b OR x < z ) |
a EQUAL b OR NOT GREATER OR EQUAL c OR d
|
(a EQUAL b) OR (NOT (a GREATER OR EQUAL c)) OR (a
GREATER OR EQUAL d) |
a EQUAL b OR NOT >=c OR d |
(a EQUAL b) OR (NOT (a >= c)) OR (a >= d) |
暗黙的な評価順序を変更する必要があるときは、かっこを使用して、組合せ条件の個々の条件が評価される順序を指定できる。
かっこ内の条件が先に評価される。かっこが入れ子になっている場合は、最も内側のかっこから順次外側へと評価が進められる。かっこが使用されていないかまたはかっこ内の条件が同じレベルにあるときは、下記の暗黙的な階層順序に従って論理評価が進められ、最終的な真理値が決定される。
比較(略記比較条件があれば、通常の形に展開してから)
字類
条件名
スイッチ状態
正負