【COBOL 書き1-8-6】CONTINUEを召喚!何もしない!

🧩今日の学び
CONTINUEは処理を止める命令ではなく、「何もしないと明示するだけ」で流れはそのまま継続する
IFCONTINUEを書いても制御は変わらず、意図せず処理が実行されてしまう危険がある
・COBOLは書いた意図ではなく実際の処理の流れで動くため、分岐構造の理解が重要

なるお)てか、命令かけって別に命令ないんすけど?

お前は引っ込んでろ!って業務命令だったら大歓迎ですけど。

IFに命令がないとどうなるのか

係長)どんな業務命令だよ…。

前に抜けの話ししたときのこと覚えてないか?

な)軽い記憶喪失なので。

係)…

な)えーと…、見れば思い出します…

係)ま、いい。読めるだけじゃなにも変わらないってことがよくわかっただろ。

CONTINUEは覚えてるのか?

な)覚えてますよー。係長が中二病だったってことっすよね?

係)なんでそっちは覚えてるんだよ!

ったく。そのときにIFには分岐だけで、命令を書かずにCONTINUEで飛ばしただろう?

あわせて読みたい
【COBOL 読み3-8-1】CONTINUEは無言で語る中二病 🧩今日の学び・CONTINUEは「何もしない処理」ではなく「何もしないと明示する設計判断」・係長の言う通り、制御を動かさないからこそコードの意図が静かに伝わる...

な)あー、なんかありましたありました。ほっこりさせる必要があるとかないとか。

係)だからなんで、いらない方を覚えてるんだよ…

いいか、これが以前やったまとめだ。

CONTINUEは「何もしない」を明示する命令

命令何をする?
CONTINUE何もしない(そのまま下に流れる)
EXIT構造を抜ける
GO TOどこかへ飛ぶ
NEXT SENTENCE次のピリオドへ飛ぶ

CONTINUEは何もしないで流すことができる命令句なんだから、覚えておけ。

な)あい・・・で?

係)何がだよ?

な)いやどうすりゃいいんだっちゅー話ですけど?

係)CONTINUE入れればいいだろう?

な)入れればいいって、それ説明じゃないっつーの…

IF Y = “=” にCONTINUEを入れる

うーん…IF Y = "="のときは何もしないよーって言いたいわけで、CONTINUEは何も影響しないで下に続いてくれるわけだから…、命令の代わりに入れるって考えでいいのかな。

つまりは…

なるお案
こうからの

    IF Y = "="
    ELSE

 ↓

こう

    IF Y = "="
        CONTINUE
    ELSE

んで、どーん!と。

📝 COBOL sum.cob
  1IDENTIFICATION DIVISION.
  2PROGRAM-ID. CALC-SUM.
  3
  4DATA DIVISION.
  5WORKING-STORAGE SECTION.
  6
  701 X PIC 9(3) VALUE 0.
  801 TOTAL PIC 9(5) VALUE 0.
  901 Y PIC X(3).
 10
 11PROCEDURE DIVISION.
 12
 13PERFORM UNTIL Y = "="
 14
 15    DISPLAY "IRERO"
 16    ACCEPT Y
 17
 18    IF Y = "="
 19        CONTINUE
 20    ELSE
 21        IF Y IS NUMERIC
 22            MOVE FUNCTION NUMVAL(Y) TO X
 23            ADD X TO TOTAL
 24        ELSE 
 25            DISPLAY "ERROR ZANEN ENTER SUJI!!" 
 26        END-IF
 27    END-IF
 28
 29END-PERFORM
 30
 31DISPLAY TOTAL.
 32STOP RUN.

ってことで、どうでやんしょ?

係)なら実行してみろ。

な)あい。

動いた。でも結果がおかしい

💻 ターミナル出力 実行結果
IRERO
1
ERROR ZANEN ENTER SUJI!!
IRERO
2
ERROR ZANEN ENTER SUJI!!
IRERO
3
ERROR ZANEN ENTER SUJI!!
IRERO
=
00000

大変!大事件ですよ!動いちゃいましたよ!

係)なにが大事件なんだよ…。問題なければ動くだろが。

それによく見てみろ。

な)ほ? むーん? む!?

なんで結果が00000??1, 2, 3って入れてるのに?

てかERROR ZANEN ENTER SUJI!!が出てるってことは数字扱いされていない?

あれ?なんで?

係)なんでだと思う?

な)なにそのいきなりクイズ!?「えー、あたしいくつだと思う?」って逆質問と同じじゃないっすか!50歳とかいって「やだーもうー」ってところまでがお約束です。

係)CONTINUEレベルで、地球になんの影響も生じない会話してるな、お前…。

な)バタフライエフェクトは起きてますよ!

係)起きるかよ!いいから、何が起こってるのか考えてみろ!

な)えー

係)えーじゃない!

な)もう糖分足りなくなってるから、また糖分を取り込まないとならないじゃないですか…もう困っちゃう。

係)そもそも食うなよ…

(次へ続く)

係長のワンポイント

CONTINUEは処理を止める命令ではなく、「何もしないと明示するだけ」で流れはそのまま継続する。
CONTINUEで文法エラーは解消できるが、それだけでプログラムが正しく動くとは限らない。
COBOLは書いた意図ではなく実際の処理の流れで動くため、分岐構造の理解が重要だ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA