🧩今日の学び
・MODは割り算の「余り」を返し、偶数・奇数判定を直感的に書ける演算子
・PERFORM VARYINGとIFを組み合わせることで「回しながら判断する」一覧処理の基本形が見える
・DISPLAYは文字列と変数を並べるだけで連結されるため、空白は自分で設計する必要がある
なるお)さーて、次いっちゃいます?一本いっちゃいます?
係長)お前そのテンション、完全に飲み会前だな。
な)いやー、COBOLはおつまみですからねー。
でも、なんでお通しはラーメンじゃないんすかね?
係)なんで最初にラーメン食わなきゃならねーんだよ。ラーメンすすってたら誰も喋らねーだろうよ。
な)オツですね。
係)は?なにが…?
PERFORM VARYING × IF:回しながら判断する基本パターン
って…ゴホン——次のテーマ
「PERFORM VARYING × IF」:条件付きループ
PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 10
IF CNT MOD 2 = 0
DISPLAY "CNT=" CNT " → Even number"
ELSE
DISPLAY "CNT=" CNT " → Odd number"
END-IF
END-PERFORM
DISPLAY "Finished loop."
な)MOD?うーん、どうでもいいか。
CNTが1から1ごとに10を超えるまでルーピングIFがあって分岐だぜー。CNTがMODで2が0だぜー。DISPLAY "CNT=" CNT " → Even number"だぜー
はお?、なんすかこれ。?
全然わかりませんよ!
絶対嘘でしょこれ?
係)嘘じゃねぇよ。
な)嘘じゃないってのが嘘なんすね!
係)違うわ!
な)そうか!違うってのが嘘なので、違わない?
あれ、嘘じゃないってのは嘘じゃない?
そっか係長は正しかったんですね。
係)お、おう…
MODの正体:割って余ったら責任は誰のもの?
いいか、MODは英語の “modulo(モジュロ)” の略だ。
つまり——
割り算したときの「余り(あまり)」を出す演算子だ。
な)あまり?
おつり231円でーすとか言って、手と手が触れるあれですか?
ものすごい拒否反応される女の子ですか?
そんなに嫌がることないのにねぇ…
俺は、ミミズなんすかね…。でも魚は食べてくれますよ?自ら口の中に入れようとしてくれるんですよ?
係)どんなテンションなんだよ。
つまりは、
IF CNT MOD 2 = 0
は、こう読める。
CNTを2で割ってあまりが0なら、つまり偶数。
な)あ、そっか、CNTを2 で割ったとき、偶数だとあまりは 0 なると。
んで、偶数でなかったら、奇数だから、ELSEにとんで…
は、いいとして、次なんすかこれ?
DISPLAY "CNT=" CNT " → Even number"
絶対係長俺のこと嫌いでしょ!?
係)落ち着けよ。好きなわけ無いだろ。
な)へ!?
DISPLAYは並べるだけ:COBOLが文章っぽい理由
係)COBOLのDISPLAYはな、
文字列と変数をカンタンに並べて表示できる。
な)並べて表示?
係)そう。
COBOLでは “文字” 変数 “文字” って書くと、勝手にくっつけて出力してくれる。
「連結」って言葉すらいらん。
だからこれは、
DISPLAY "CNT=" CNT " → Even number"
実際にはこう出る。
CNT=2 → Even number
な)え……自動で間がくっつくんすか!?愛もなしに!?
係)そうだが、そこがCOBOLらしいトラップなんだ。
自動で空白が入るわけじゃない。
必要なら “CNT= ” みたいに自分でスペースを入れる。
な)おおー……なるほど!
COBOLの文字列結合は“並べるだけでOK”ってことっすね。
たしかに、文章っぽいですもんね。
係)そう。COBOLの美学は「人間が読める」こと。
“コンピュータに伝える”より、“人間に説明する”ほうが大事なんだ。
な)……あれ?
じゃあDISPLAY "CNT=" CNTの部分で、
CNTがたとえば5なら——
CNT=5 → Odd number"
ということっすよね。
PERFORMでCNTが1から10まで増える中で、IFで「偶数か奇数か」を分けて出してるってことっすよね。
係)でも、これができると“ループの中で条件分岐をする”パターンが理解できる。
つまり、「回す × 判断する」が同時にできるってわけだ。
な)あー、つまり「一覧処理」の基本ですね。
例えば、売上データ全部読んで、1000円以上のやつだけ表示とかっすね。
おむすび
係)おお、いいじゃねえか。
その感覚があればもうCOBOLで帳票ぐらい作れる。
な)え?マジっすか!?
だったら、うちの会社の給料計算とかさせちゃったりして!
係)やめとけ。間違って全員100万円とか配りかねない。
な)そっちのほうがみんな喜ぶでしょ?
係)俺はいいぞ。クビになるのはお前だけだしな。
な)え!?そこは一蓮托生、共同責任、責任転嫁でしょ!?
係)転嫁するんじゃねー!
係長のワンポイント
MODは「割り算の余り」を返す演算子で、偶数・奇数判定の定番だ。CNT MOD 2 = 0は「2で割り切れる=偶数」という、人間にも直感的な条件になる。PERFORM VARYING で回しながらIFで分岐するのが、一覧処理の基本形。DISPLAY は文字と変数を“並べた順にそのまま出す”だけで、気は利かない。
回す・判定する・表示する──この3点セットが分かれば帳票COBOLの入口だ。

コメント