技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

COBOL:CONTINUEの挙動

COBOLのCONTINUEの細かい挙動を説明したページがいつの間にか消えていたので、バックアップ代わりに記事化します。
 
【CONTINUEの挙動】
「CONTINUE」は、何もしないことを明示するための命令です。
分岐が発生する場合に、ある分岐の場合は何もしないということを明示するために使うのが一般的な使い方です。
 
(例:FLG≠1の場合は何もしない)
IF FLG = 1 THEN
  …
ELSE
  CONTINUE
END-IF.
 
なお、以下のように何も書かなくても挙動的には同じになりますが、コンパイラによってはコンパイル時にエラーやワーニングが出るかもしれません。
 
IF FLG = 1 THEN
  …
ELSE
END-IF.
 
【NEXT SENTENCEとの挙動の違い】
混同されやすい命令として「NEXT SENTENCE」があります。
「NEXT SENTENCE」は次の文にジャンプするというもので、挙動的には次のピリオド(.)がある場所まで遷移するというものです。
ピリオドへのGOTOだと思ってもらって間違いありません。
 
ジャンプが発生するため、「CONTINUE」とは挙動が異なります。
 
(例:FLG1=1かつFLG2≠1の場合、処理②は実行される)
IF FLG1 = 1 THEN
  IF FLG2 = 1 THEN
    処理①
  ELSE
    CONTINUE
  END-IF
  処理②
END-IF.
 
(例:FLG1=1かつFLG2≠1の場合、処理②は実行されない)
IF FLG1 = 1 THEN
  IF FLG2 = 1 THEN
    処理①
  ELSE
    NEXT SENTENCE
  END-IF
  処理②
END-IF.
 
【EVALUATE文と併用した場合の挙動】
COBOL(COBOL85以降)では、EVALUATE文による多岐選択が可能で、C言語javaで言うswitch文と同じようなことができます。
switch文内でもCONTINUEを使用することが可能ですが、CONTINUEを使用しないとCONTINUE使用時と異なる挙動を示すようになるので注意が必要です。
CONTINUEを使わない場合は、前後2つの条件がOR条件で繋がるような形になります。
 
(例:FLG=2の場合は何もしない、FLG=3の場合は処理②を実行)
EVALUATE FLG
  WHEN 1
    処理①
  WHEN 2
    CONTINUE
  WHEN 3
    処理②
  WHEN OTHER
    処理③
END-EVALUATE.
 
(例:FLG=2の場合とFLG=3の場合は処理②を実行)
EVALUATE FLG
  WHEN 1
    処理①
  WHEN 2
  WHEN 3
    処理②
  WHEN OTHER
    処理③
END-EVALUATE.