🧩今日の学び
・GIVINGはDIVIDE専用ではなく、ADDなどでも使える「結果の格納先を指定する句」である
・なるおの検証のように、GIVINGを使うと元データを保持したまま別の変数に結果を出力できる
・COBOLは計算よりも「結果をどこに置くか」を設計する言語である
なるお)係長、昨日部屋で寝てたときにふと思ったんですけど、GIVINGってDIVIDE以外でも使えるんじゃないすか?
今回の四則は全部Bに計算結果を入れるってことでしたけど、GIVINGがあれば、ADDとかでも同じくBは変えずに計算結果を作ることできるんじゃないかなって。
GIVINGはDIVIDE専用じゃないのでは?
係長)……
な)係長?
係)お前誰だ?
な)へ?
係)俺の知ってる「なるお」はそんなやつじゃねーぞ!
家に帰ったら仕事のことなんかすぐ忘れて徹夜でゲームして、勤務中に寝るやつだろ!?
な)誰っすかそれ!
係)いや、ほんとにそんなこと思ったのか…びっくりだよ。
な)そんなですか!?
係)いや、良いぞ、そうやって自分で考えるのは実に良いぞ。
で、答えはと言うと…だ…、いや、だったらやってみろ。見ててやるから。
な)え…、だってそうじゃないかって思っただけで…
仮説をコードにする:ADDでGIVINGを使ってみる
係)それがいいんだろ!
いま、お前がどこかでコードを書くわけじゃないんだ。いくらでも想像を形にして、お前の考えが正しいかやってみろ!
な)え…、えと…、はい…
まず、
A 2 B 3 A + B をRESULTに入れる
と考えて…
01 A PIC 9(3) VALUE 2. 01 B PIC 9(3) VALUE 3. 01 RESULT PIC 9(3). ADD A TO B GIVING RESULT.
が必要ってことっすよね…
係)ふむ、だったら形をきちんと整えて実行してみろ。
な)あい…
1IDENTIFICATION DIVISION. 2PROGRAM-ID. GIVING-TEST. 3 4DATA DIVISION. 5WORKING-STORAGE SECTION. 601 A PIC 9(3) VALUE 2. 701 B PIC 9(3) VALUE 3. 801 RESULT PIC 9(3). 9 10PROCEDURE DIVISION. 11ADD A TO B GIVING RESULT. 12DISPLAY B. 13DISPLAY RESULT. 14STOP RUN.
って、とこですよね…
係)…
な)で、コンパイルして、実行っと…
003 005
あ、でた!
BはBのままで、RESULTだけ変わりましたよ!
係)ということで、お前の想定は正しかったということだ。
余りを出すことがGIVINGの目的じゃなく、計算結果を設定した変数に入れるための句ということがわかっただろ。
おむすび
な)おー!説明されなくても理解しちゃう俺って、やっぱりすごいっすよね!
係)途中打ち間違い何度も直してるの見てるっての。
な)あう
係)途中コンパイルエラーや実行エラー出しまくってるの見てるっての。
な)あうあう
係)ま、そこをきちんと修正して、正しいコードにたどり着いたんだから、そこは認めてやるよ。
な)おー!「GIVING免許皆伝」を係長が俺にGIVINGですね!
係)あのな…でも、よく言った。だったらもっと行くぞ!
な)え?え!?
係長のワンポイント
GIVINGは「余りを出すためのもの」じゃない。
結果を書き込む場所を、自分で決めるための句だ。
だから、DIVIDEだけでなく、ADDでも同じ思想で使える。
Bを更新するか、RESULTに分けるかは設計の選択になる。
COBOLは計算より、結果の置き場所を設計する言語だ。


コメント