EVALUATE(評価)文
EVALUATE(評価)文は、多くの分岐点や合流点がある構造を記述しておいて、複数の条件を評価できるようにする。 その評価の結果によって、
ランタイム要素
のその後の動きが決まる。
一般形式
構文規則
EVALUATE文の最初の WHEN指定の前に現れる作用対象または語TRUEとFALSEを、個別には選択の左辺といい、総称して選択の左辺の組という。
EVALUATE文の最初のWHEN指定の中に現れる作用対象または語TRUEとFALSEとANYを、個別には選択の右辺といい、総称して選択の右辺の組という。
THROUGHとTHRUは同義である。
THROUGH指定によってつないだ2つの作用対象は、同じ字類のものにする。このようにTHROUGH指定によってつないだ2つの作用対象は、単一の選択の右辺を構成する。
選択の右辺の組に含まれる選択の右辺の数は、選択の左辺の数と等しくする。
選択の右辺の組に含まれる各選択の右辺は、選択の左辺の組に含まれる同じ順番の位置にある選択の左辺と対応させる。これには、下記の規則が適用される。
選択の右辺の中に現れる一意名、定数、算術式は、選択の左辺中の対応する作用対象と比較する作用対象として、有効なものにする。(
手続き部
の章の
比較条件
節を参照。)
選択の右辺として現れる条件-1、条件-2あるいは語TRUEまたはFALSEは選択の左辺の組の中の条件式または語TRUEまたはFLASEと対応させる。
語ANYは、任意の種類の選択の左辺と対応できる。
一意名を使えるところでは、浮動小数点数データ項目を参照できる。
数字定数を使えるところでは、浮動小数点数定数を参照できる。
一意名を使えるところでは、ポインター データ項目を参照できる。
選択の左端部分が相対作用要素、一意名を含まない字類条件、一意名を含まない記号条件、および数式を含まないである記号条件のいずれかである場合は、選択は、部分式である。
選択の右辺として部分式-1または部分式-2を指定する場合、これらは一意名か定数か算術式である選択の左辺と対応させる。部分式-1および部分式-2は一連のCOBOLの語であり、対応する選択の左辺の後ろに続けたときに、有効な条件式となるものでなければならない。
一般規則
EVALUATE文を実行すると、まず、選択の左辺と選択の右辺が評価されて、1つの数値、1つの文字値、数値の範囲、文字値の範囲、真理値のいずれかが割り当てられる。これらの値は下記のように決定される。
一意名-1および一意名-2によって指定される選択の左辺、および一意名-3および一意名-5によって指定される右辺のうちで、NOT指定またはTHROUGH指定を伴わないものは、その一意名によって参照されるデータ項目の値と字類を割り当てられる。
定数-1および定数-2によって指定される選択の左辺、および定数-3および定数-5によって指定される右辺のうちでNOT指定もTHROUGH指定も伴わないものは、その定数の値と字類を割り当てられる。定数-3と定数-5が表意定数のZEROであると、それらには対応する選択の左辺の字類が割り当てられる。
算術式として式-1および式-2を指定された選択の左辺、および算術式-1または算術式-3が含まれるNOT指定もTHROUGH指定も伴わない選択の右辺は、算術式の評価規則に従って数値を割り当てられる。(
手続き部
の章の
算術式
算術式
節を参照。)
条件式として式-1および式-2を指定された選択の左辺、および条件-1と条件-2を指定された選択の右辺は、条件式の評価規則に従って真理値を割り当てられる。(
手続き部
の章の
条件式
条件式
節を参照。)
語TRUEまたはFALSEを指定された選択の左辺または選択の右辺は、真理値を割り当てられる。語"true" が指定された項目は、真理値の「真」を割り当てられ、語"false" が指定された項目は、真理値の「偽」を割り当てられる。
語ANYを指定された選択の右辺は、それ以上評価されない。
選択の右辺にNOT指定を付けずにTHROUGH指定を書くと、選択の左辺と比較したときの値の範囲は、比較の規則に基づいて、最初の作用対象以上で2番目の作用対象以下となる。(選択の右辺にNOT指定を付けずにTHROUGH指定を書くと、選択の左辺と比較したときの値の範囲は、比較の規則に基づいて、最初の作用対象以上で2番目の作用対象以下となる。(
手続き部
の章の
比較条件
節を参照。) 最初の作用対象の方が2番目の作用対象よりも大きいと、その範囲には値は何も含まれない。の
比較条件
の節を参照。) 最初の作用対象の方が2番目の作用対象よりも大きいと、その範囲には値は何も含まれない。
選択の対象にNOT指定を書くと、割り当てられる値は、その値と等しくないすべての値、またはNOT指定を指定しなかった場合に割り当てられる値以外のものとなる。
EVALUATE文の実行は、選択の左辺と選択の右辺の比較へと進む。そして、選択の左辺の組の中にWHEN指定を満たすものがあるかどうかが判定される。この比較は下記のように行われる。
最初のWHEN指定の選択の右辺の組の中の各選択の右辺が、選択の左辺の組の中の順序位置が同じ選択の左辺と比較される。
比較対象の項目に割り当てられている値が数値、文字値、数値の範囲、文字値の範囲である場合は、選択の右辺に割り当てられている値または値の範囲内のいずれかの値が、比較規則に照らして選択の左辺に割り当てられている値と等しければ、その比較条件は満足される。(
手続き部
の章の
比較条件
節を参照。)
比較対象の項目に割り当てられている値が真理値である場合は、選択の左辺と選択の右辺に同じ真理値が割り当てられているときに、その比較条件は満足される。
比較対象の項目に割り当てられている値が語ANYである場合は、その比較条件はつねに満足される。この場合は、選択の左辺の値は何であってもよい。
比較対象の選択の右辺の組に含まれる各選択の右辺に関して、上記の比較が満足されると、その選択の右辺の組が含まれるWHEN指定が選択の左辺の組を満たすものの1つとして選択される。
比較対象の選択の右辺の組に含まれる選択の右辺の中に、上記の比較が満足しないものがいくつかあると、その選択の右辺の組は選択の左辺の組を満たさない。
後続の選択の右辺の組に対して、上記の比較処理が、原始
要素
の記述されている順序で繰り返し実行される。そして、選択の左辺の組を満たすWHEN指定が選択されるか、またはすべての選択の右辺の組を比較し尽くした時点で、この処理は終わる。
比較処理が終わると、EVALUATE文の実行は下記のように進む。
WHEN指定が選択された場合、そのWHEN指定の後ろに続く最初の無条件文-1に処理は進む。
WHEN指定が選択されなかった場合、WHEN OTHER指定が指定されていれば、無条件文-2に処理は進む。
EVALUATE文の実行は、選択されたWHEN指定またはWHEN OTHER指定の最後まで到達した時、あるいは選択されたWHEN指定がなくWHEN OTHER指定が指定されていない時に終了する。(
COBOL言語の概念
の章の
明示範囲符と暗黙範囲符
節を参照。)
選択の右辺が部分式-1または部分式-2によって指定されている場合、対応する選択の左辺は語TRUEであるものとみなされる。選択の右辺はそれぞれ条件-1または条件-2とみなされる。ここで、条件-1または条件-2はそれぞれ、元の対応する選択の左辺-1または選択の左辺-2に続く部分式-1または部分式-2から導出される条件式である。