Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


EVALUATE ステートメント

EVALUATE ステートメントは、一連のネストされた IF ステートメントの省略表現を提供します。このステートメントは、複数の条件を評価することができます。 以降の処置は、これらの評価の結果次第です。

構文図を読む構文図をスキップする
フォーマット 

>>-EVALUATE--+-ID-1-------+--+--------------------------+------->
             +-リテラル-1--+  | .----------------------. |   
             +-式-1-------+  | V                      | |   
             +-TRUE-------+  '---ALSO--+-ID-2-------+-+-'   
             '-FALSE------'            +-リテラル-2--+       
                                       +-式-2-------+       
                                       +-TRUE-------+       
                                       '-FALSE------'       

   .----------------------------------------------------------------.   
   | .----------------------------------------.                     |   
   V V                                        |                     |   
>------WHEN--| 句 1 |--+--------------------+-+--命令ステートメント-1-+-->
                       | .----------------. |                             
                       | V                | |                             
                       '---ALSO--| 句 2 |-+-'                             

>--+----------------------------------+--+--------------+------><
   '-WHEN OTHER--命令ステートメント-2---'  '-END-EVALUATE-'   

句 1

|--+-ANY------------------------------------------------------+--|
   +-条件-1---------------------------------------------------+   
   +-TRUE-----------------------------------------------------+   
   +-FALSE----------------------------------------------------+   
   '-+-----+--+-ID-3-------+--+-----------------------------+-'   
     '-NOT-'  +-リテラル-3--+  '-+-THROUGH-+--+-ID-4-------+-'     
              '-算術式-1----'    '-THRU----'  +-リテラル-4-+       
                                             '-算術式-2---'       

句 2

|--+-ANY------------------------------------------------------+--|
   +-条件-2---------------------------------------------------+   
   +-TRUE-----------------------------------------------------+   
   +-FALSE----------------------------------------------------+   
   '-+-----+--+-ID-5-------+--+-----------------------------+-'   
     '-NOT-'  +-リテラル-5--+  '-+-THROUGH-+--+-ID-6-------+-'     
              '-算術式-3----'    '-THRU----'  +-リテラル-6-+       
                                             '-算術式-4---'       

WHEN 句の前にあるオペランド
これらのオペランドは、2 つの方法のいずれかにより解釈されます。 その解釈は、それらが指定される方法に応じて異なります。
  • 個別に解釈されます。それらは選択サブジェクト と呼ばれます。
  • まとめて解釈されます。それらは、選択サブジェクトの集合 と呼ばれます。
WHEN 句の中のオペランド
これらのオペランドは、2 つの方法のいずれかにより解釈されます。 その解釈は、それらが指定される方法に応じて異なります。
  • 個別に解釈されます。それらは選択オブジェクト と呼ばれます。
  • まとめて解釈されます。それらは選択オブジェクトの集合 と呼ばれます。
ALSO
一連の選択サブジェクト内の選択サブジェクトを分離し、 一連の選択オブジェクト内の選択オブジェクトを分離します。
THROUGH と THRU
これらのキーワードは同じ意味です。

THRU 句によって結合されている 2 つのオペランドは、同じクラスに属していなければなりません。 このようにして結合された 2 つのオペランドは、1 つの選択オブジェクトを構成します。

選択オブジェクトの集合内にある選択オブジェクトの個数は、選択サブジェクトの個数と一致しなければなりません。

選択オブジェクトの集合内にあるそれぞれの選択オブジェクトは、次に示す規則に従って、 選択サブジェクトの集合内にある同じ順序位置を持つ選択サブジェクトに対応していなければなりません。

END-EVALUATE 句

この明示的範囲終了符号は、EVALUATE ステートメントの範囲を区切るために使用されます。 END-EVALUATE 句を使うことによって、 条件的な EVALUATE ステートメントを別の条件ステートメントの中にネストすることができます。

詳しくは、範囲区切りステートメントを参照してください。

値の決定

EVALUATE ステートメントを実行すると、それぞれの選択サブジェクトと選択オブジェクトが評価され、 数字、英数字、DBCS、または国別文字の値、数字、英数字、DBCS、または国別文字の値の範囲、 または真の値が割り当てられるように演算が実行されます。これらの値は、次のようにして決定されます。

  • ID-1ID-2、... によって指定される選択サブジェクト、 および NOT 句または THRU 句を伴わない ID-3 または ID-5 によって指定される選択オブジェクトには、 それらが参照するデータ項目の値とクラスが割り当てられます。
  • リテラル-1リテラル-2、... によって指定される選択サブジェクト、 および NOT 句または THRU 句を伴わない リテラル-3 またはリテラル-5 によって指定される選択オブジェクトには、指定されたリテラルの値とクラスが割り当てられます。リテラル-3 またはリテラル-5 が形象定数の ZERO、QUOTE、または SPACE である場合は、形象定数には対応する選択サブジェクトのクラスが割り当てられます。
  • 算術 式として式-1式-2、... が指定された選択サブジェクトと算術式-1 または算術式-3 が指定された選択オブジェクト (NOT 句も THRU 句も伴わないもの) には、算術式を評価する際の規則に従って、数字が割り当てられます。(算術式を参照してください。)
  • 条件 式として式-1式-2、... が指定された選択サブジェクトと、条件-1 または条件-2 が指定された選択オブジェクトには、 条件式を評価する際の規則に従って、真の値が割り当てられます。(条件式を参照してください。)
  • キーワード TRUE または FALSE によって指定されたどの選択サブジェクトまたは選択オブジェクトにも、 真の値が割り当てられます。 真の値「真」は、キーワード TRUE を付けて指定された項目に割り当てられ、 真の値「偽」は、キーワード FALSE を付けて指定された項目に割り当てられます。
  • キーワード ANY を付けて指定された選択オブジェクトは、どれもそれ以上評価されることはありません。
  • THRU 句が、NOT 句を持たずに選択オブジェクトに対して指定されている場合、 選択サブジェクトと比較するとき、比較される値の範囲は、 比較の規則に従って第 1 オペランド以上で第 2 オペランド以下にあるすべての値を含みます。 第 1 オペランドが第 2 オペランドより大きい場合には、範囲の中に該当する値は存在しません。
  • NOT 句が、選択オブジェクトに対して指定されている場合、その項目に割り当てられる値は、 その項目に対して NOT 句が指定されていないとすれば割り当てられたはずの値、 または範囲内の値を除くすべての値になります。

選択サブジェクトと選択オブジェクトの比較

EVALUATE ステートメントの実行は、選択サブジェクトに割り当てられた値と選択オブジェクトに割り当てられた値を比較し、 いずれかの WHEN 句が選択サブジェクトの集合を満たすかどうかを判別するように処理されます。この比較は、次のようにして行われます。

  1. 選択オブジェクトの集合内にある各選択オブジェクトは、それぞれにとって最初の WHEN 句に出会うと、 選択サブジェクトの集合内にある同じ順序位置を持つ選択サブジェクトと比較されます。 比較が条件を満たすためには、以下の条件のうち 1 つを満たす必要があります。
    1. 比較される項目に、数字、英数字、DBCS、または国別文字の値、または数字、英数字、DBCS、または国別文字の値の範囲が割り当てられている場合、選択オブジェクトに割り当てられた値、または値の範囲内の 1 つの値が、比較の規則に従って、選択サブジェクトに割り当てられた値と等しい場合に、比較条件を満足したことになります。
    2. 比較される項目が、真の値を割り当てられている場合には、 両方の項目が同じ真の値を割り当てられていれば、 比較は条件を満たしたことになります。
    3. 比較される選択オブジェクトが、キーワード ANY を付けて指定されている場合には、 選択サブジェクトの持つ値に関係なく、比較は常に条件を満たします。
  2. 比較される選択オブジェクトの集合内のすべての選択オブジェクトについて、 上記の比較が条件を満たした場合には、その選択オブジェクトの集合を含む WHEN 句が、 選択サブジェクトの集合を満たすものとして選ばれます。
  3. 比較される選択オブジェクトの集合内のすべての選択オブジェクトについて、 上記の比較が条件を満たさなかった場合には、その選択オブジェクトの集合は、 選択サブジェクトの集合を満足しなかったことになります。
  4. このプロシージャーは、以降の選択オブジェクトの集合について、ソース・テキスト中にそれらが現れる順番に繰り返され、 選択サブジェクトの集合を満たすいずれかの WHEN 句が選ばれるか、または、選択オブジェクトの全集合がなくなるまで行われます。

EVALUATE ステートメントの実行

比較演算が完了すると、EVALUATE ステートメントの実行は、以下の順序で進められます。

  • ある WHEN 句が選ばれると、その選択された WHEN 句に続く最初の命令ステートメント-1 から実行が継続されます。1 つの命令ステートメント-1 に対して、複数の WHEN 句を指定することができる点に注意してください。
  • 何も WHEN 句が選択されないが、WHEN OTHER 句を指定してある場合には、実行は命令ステートメント-2 から継続されます。
  • WHEN 句がまったく選択されず、しかも WHEN OTHER 句を指定していない場合には、 範囲終了文字に続く次の実行可能ステートメントから実行が継続されます。
  • EVALUATE ステートメントの実行範囲は、選ばれた WHEN 句の範囲の終わりに達するか、 または WHEN OTHER 句の範囲の終わりに達したときに終了します。あるいは、 選ばれた WHEN 句が存在せず、WHEN OTHER 句も指定されていないときに終了します。

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)