🧩今日の学び
・CONTINUEは処理を止める命令ではなく、「何もしないと明示するだけ」で流れはそのまま継続する
・IFにCONTINUEを書いても制御は変わらず、意図せず処理が実行されてしまう危険がある
・COBOLは書いた意図ではなく実際の処理の流れで動くため、分岐構造の理解が重要
なるお)てか、命令かけって別に命令ないんすけど?
お前は引っ込んでろ!って業務命令だったら大歓迎ですけど。
IFに命令がないとどうなるのか
係長)どんな業務命令だよ…。
前に抜けの話ししたときのこと覚えてないか?
な)軽い記憶喪失なので。
係)…
な)えーと…、見れば思い出します…
係)ま、いい。読めるだけじゃなにも変わらないってことがよくわかっただろ。
CONTINUEは覚えてるのか?
な)覚えてますよー。係長が中二病だったってことっすよね?
係)なんでそっちは覚えてるんだよ!
ったく。そのときにIFには分岐だけで、命令を書かずにCONTINUEで飛ばしただろう?

な)あー、なんかありましたありました。ほっこりさせる必要があるとかないとか。
係)だからなんで、いらない方を覚えてるんだよ…
いいか、これが以前やったまとめだ。
CONTINUEは「何もしない」を明示する命令
| 命令 | 何をする? |
|---|---|
| CONTINUE | 何もしない(そのまま下に流れる) |
| EXIT | 構造を抜ける |
| GO TO | どこかへ飛ぶ |
| NEXT SENTENCE | 次のピリオドへ飛ぶ |
CONTINUEは何もしないで流すことができる命令句なんだから、覚えておけ。
な)あい・・・で?
係)何がだよ?
な)いやどうすりゃいいんだっちゅー話ですけど?
係)CONTINUE入れればいいだろう?
な)入れればいいって、それ説明じゃないっつーの…
IF Y = “=” にCONTINUEを入れる
うーん…IF Y = "="のときは何もしないよーって言いたいわけで、CONTINUEは何も影響しないで下に続いてくれるわけだから…、命令の代わりに入れるって考えでいいのかな。
つまりは…
こうからの
IF Y = "="
ELSE
↓
こう
IF Y = "="
CONTINUE
ELSE
んで、どーん!と。
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は書いた意図ではなく実際の処理の流れで動くため、分岐構造の理解が重要だ。

コメント