🧩今日の学び
・IF文は次の「1文」だけを対象とし、ピリオドの位置で処理範囲が決まる
・ピリオドが途中にあると文が分断され、意図しない命令が無条件で実行される
・係長の言う通り、COBOLは見た目ではなく「どこまでが1文か」で動くため、ピリオドの位置が設計そのものになる
DISPLAY "A" DISPLAY "B" DISPLAY "C".
なるお)で、なんだってー。実行しろってか。
IDENTIFICATION DIVISION. PROGRAM-ID. DIS. PROCEDURE DIVISION. DISPLAY "A". DISPLAY "B". DISPLAY "C". DISPLAY "A" DISPLAY "B" DISPLAY "C". STOP RUN.
っていうのでどうさね。
ピリオドがなくても結果は同じに見える
A B C A B C
って、同じ結果じゃん…どういうことっすかこれ?ピリオドついてなければ、巻き込むんだったら、
ABC
という出力になるじゃないですの?
巻き込まれるのは「文字」ではなく「処理のまとまり」
係)別に処理が連続するからといって、ABCとなるわけじゃないぞ。
な)へ?だって「あたいの人生を全て巻き込むって言ったじゃない!」状態だったらABCになるんじゃ?
係)つまりこういうことだ。
DISPLAY "A" を実行(Aを出して、改行) 次に DISPLAY "B" を実行(Bを出して、改行) 最後に DISPLAY "C" を実行(Cを出して、改行) ここでピリオドが来たから、この一連の文(センテンス)は終わり
な)なんで勝手に改行してんのさ!
係)俺に仕様の文句を言うなよ…。
な)ひどい!信じてついてきたのに、すぐに裏切るなんて!あたしにはこの町に知り合いなんていないのよ!どうすればいいの!ォィォィォィォィ
係)オイオイを声に出すやついるんだな。
な)なんで冷静!?
係)つまり、DISPLAYがピリオド無く連続したからといって、文字自体がくっついて ABC になるわけではなく、「処理の順番」が1つのグループとしてくっついているだけだってことだ。
な)えー、だったら、さっきの係長の話は意味ないじゃないすかー。
IFを入れると巻き込みが見える
係)さっきのコードにこういった条件をいれてみろ。
IF 1 = 2
な)係長らしい嘘にまみれた条件ですね。
係)嘘なんて言ってねーだろ!!いいからやれ!
な)ほんと横暴⋯
IDENTIFICATION DIVISION.
PROGRAM-ID. DIS.
PROCEDURE DIVISION.
IF 1 = 2
DISPLAY "A".
DISPLAY "B".
DISPLAY "C".
IF 1 = 2
DISPLAY "D"
DISPLAY "E".
DISPLAY "F".
IF 1 = 2
DISPLAY "G"
DISPLAY "H"
DISPLAY "I".
STOP RUN.
B C F
え、なにこれ??
係)考えてみろ。
な)えー
係)考えろ。
な)むー、なんなのさー。
IFを入れると巻き込みが見える
IF 1 = 2
DISPLAY "A".
DISPLAY "B".
DISPLAY "C".
これだと、条件を満たしてないんだから、処理は飛ばされる?
……じゃなくて、最初のAのあとにピリオドがあるから、そこでこのIF終わってるってことじゃないこれ?
ってことはインデントをきちんとするとわかっちゃうんじゃないこれ?
IF 1 = 2
DISPLAY "A".
DISPLAY "B".
DISPLAY "C".
って書くと結果と一緒よね!素敵ね!
で、次。
IF 1 = 2
DISPLAY "D"
DISPLAY "E".
DISPLAY "F".
今回も条件が成立してないんだから、処理は飛ばされると思いきや、1つ目にピリオドがついていないから、まだIFは続きまっせーで次へ。Eにピリオドがついているから、条件はここで終わるっと。
そして、改めてF表示が発動!書き方を整えるとこうね!
IF 1 = 2
DISPLAY "D"
DISPLAY "E".
DISPLAY "F".
んで、最後はっていうと…
IF 1 = 2
DISPLAY "G"
DISPLAY "H"
DISPLAY "I".
最後にピリオドあるんだから、そこまでの三者の愛憎が入り乱れて、もう誰も愛されなくなって、表示なし!
どうこれ、係長これ!
係)いや、まぁ言ってることは合ってるんだが、なんで愛憎が入り乱れるんだよ…
おむすび
な)いやもう、入り乱れたのは5者ですけど!女1男4の合コンですけど!勝ち目無いから、1人で飲みまくって食べまくって割り勘で勝ちますけど!
係)しらねーよ!
でも、わかったろ!通常だと、あまり巻き込まれるという意味がわからないと思うが、こうやって条件がつくと巻き込まれていることがよくわかるだろ。
な)あ、そういう話。
係)なんの話だと思ってたんだよ…。
な)いやー奇数だと絶対ハブられ者がいるって話かなと。
係)だから今仕事中だっての。
いいか、ピリオドは“表示をつなぐ”ものじゃない。処理の所属先を切るものだってことだ。
な)そうっすよね。無視されるやつを配置しておかないと取り合いへし合いになっちゃいますしね。
係)なんの話してんだよ!
な)いや、いいんすよ、俺がハブられても。そういう星の下に生まれたことを呪いませんよ。自分は常に不幸が続く運命なんて呪いませんよ。朝の正座占いで11位だってことも気にしませんよ。12位の人には謝るのに、11位の人には謝らないことも気にしませんよ。
係)どういう卑屈理論だよ…
な)でも、飲んで食って、全員の財布に痛手を与えられるから楽しみですよ!
係)結局楽しんでんじゃねーか!
な)だって俺の財布も痛手ですよ?
係)どんだけ食うんだよ!
係長のワンポイント
ピリオドは文字をつなぐ記号じゃない。
処理がどこまで条件に属するかを決める境界線だ。
だから DISPLAY が並んでも、くっつくのは文字ではなく“支配範囲”になる。IF と組み合わせると、その巻き込みが一番よく見える。
COBOLは見た目じゃなく、ピリオドまでを1文として動く言語だ。


コメント