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.