🧩今日の学び
・COBOLの「まとめ書き」で複数変数を一度に初期化できる。
・ゴミデータを残すと“売上バグって大金持ち”になる危険を学ぶ。
・SPACESとZEROの使い分けが、COBOLマスターへの第一歩。
今日のコード
PARSE-AND-VALIDATE.
*> 初期化
MOVE SPACES TO F-ORDER-DATE-A F-ORDER-ID-A F-BUYER-A
F-SKU-A F-QUANTITY-A F-UNIT-PRICE-A
F-TAX-RATE-A F-COUNTRY-A
MOVE ZERO TO N-QUANTITY N-UNIT-PRICE N-TAX-RATE
N-LINE-NET N-LINE-TAX N-LINE-GROSS.
なるお)あーこれは、やな感じ。
いやまて、MOVE TOだからそこはわかるわ。入れるんだよね。
入れるのはいいとして、なんで3つ並列にしてんの?
並列のほうが電力は高いから明るいって橘先生言ってた。
あれ逆だっけ?ま、いいか。
係)なんで理科持ち出して、最後どうでもよくなってんだ。
な)だって、並列も直列も用意されたくぼみに電池を入れていくしかないこの世界ですから。
俺達に自由なんてなかった。だから人はみな自由を求めて暴動を起こすんですよ。自由の名のもとにお店から略奪するんですよ、自由の名のもとに逮捕されるんですよ。安心できますね!
係)そうかよかったな。
な)もうちょっと感情込めて…
MOVE SPACES の謎:まとめ書きはズルじゃない
係)ここはな、ただの まとめ書き だ。
COBOLは同じ処理を複数の変数にまとめて書ける。
MOVE SPACES TO A B C
って書いたら、
- A にスペースを入れる
- B にスペースを入れる
- C にスペースを入れる
を順番にやってくれる。
だから「並列処理」でも「電気が分散する」でもなくて、単に「まとめて書いただけ」だ。
わざわざ1行ずつ
MOVE SPACES TO F-ORDER-DATE-A.
MOVE SPACES TO F-ORDER-ID-A.
って書くのがめんどいから、省略してるだけだ。
手抜きじゃなくて効率化:COBOL流のまとめ書き
な)え、まとめ書き?…じゃあCOBOL先生、ただの手抜きってこと?
Japanese TENUKI!?
係)そうだ。COBOLの美徳は「冗長さ」だけどな、さすがに全部バラして書くと紙が尽きる。
な)WorldWide TENUKI!?
ってなんで、スペースなんです?これもPerfect TENUKI?Perfect ZEONG?
係)気に入ってんじゃねーよ。ホント単純だな。
←パーフェクトジオングが面白かったご様子
な)でも係長、ガンダム世代でしょ?ファーストファンダム世代でしょ?キャスバルにーさーん世代でしょ?
係)ここで SPACES を MOVE してるのは 「前のゴミを消すため」 だ。
な) (無視!?)
ゴミスペースの正体:前回の値が残る恐怖
係)前にも説明したろ?
CSV の1行を読んでくる → さっきの値が変数に残ってるかもしれない。
もし「今回の項目が空欄」だったら、前回の値がそのまま残っちまう。
な)あーなんか前に言ってましたね…
なんで他人事なんだよ?
例えば
1行目:数量 = “10”
2行目:数量 = 空欄
ここで初期化してなかったら、2行目も数量 = “10” のまま処理されて「売上バグって大金持ち」になる。
だから「まず全部 SPACES で消して、必要ならそのあと数値変換で 0 を入れる」ってのが王道。
な)え、最初からゼロで埋めとけばいいじゃないですか!?
係)ゼロを入れるのは数値フィールドだけ。
文字列フィールドにゼロ入れたら「0000…」って文字になるだろ?
CSVでバイヤー名が「0000」になったらクレーム殺到だ。
おむすび
係)それに前にも言ったが、いちいち「0」入れてたら、処理速度落ちるしな。
な)らくらくホンでも、0入れるぐらいなら一瞬じゃないです?
買ってきますか?あ、老眼で見えないんすね…
係)お前をぶっ叩くぐらいは見えてるから大丈夫だ。
な)は!?

コメント