COBOLデザインパターン(定数)
最近さぼり気味です。
スケジューリングが下手で時間を作れてないです。
ちょっと知識の棚卸をしてみます。
COBOLでデザパタをしてみます。
といってもGoFではないです。
以外に他人のプログラム読んでいてできていたりできていなかったりするところを思いついた順番で書きます。
まずは、定数。
これを見て「なるほど!」と思う人はなかなかいないと思いますが、OpenCOBOLの腕鳴らしなのでご勘弁。
* EMUN.cob : 定数を使いマジックナンバーをなくします。 IDENTIFICATION DIVISION. PROGRAM-ID. EMUN. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 SW-SHINGO PIC 9. PROCEDURE DIVISION. LOOP. ACCEPT SW-SHINGO. EVALUATE SW-SHINGO WHEN 1 DISPLAY '信号赤:停まれ' WHEN 2 DISPLAY '信号青:進んでよし' WHEN 3 DISPLAY '信号黄:できたら停まって' WHEN 0 DISPLAY 'おわり' STOP RUN WHEN OTHER DISPLAY '信号こわれてる' END-EVALUATE. GO TO LOOP. STOP RUN.
入力が1なら、”赤”。
入力が2なら、”青”。
入力が3なら、”黄”。
入力が0なら、おわりです。
このプログラムなら処理内容から意味はわかります。
でもわかりづらかったことも多いですよね。(ちょっと強引・・・)
下のようにしましょう。
* EMUN.cob : 定数を使いマジックナンバーをなくします。 IDENTIFICATION DIVISION. PROGRAM-ID. EMUN. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CNS-SHINGOU. 05 OWARI PIC 9 VALUE 0. 05 AKA PIC 9 VALUE 1. 05 AO PIC 9 VALUE 2. 05 KI PIC 9 VALUE 3. 01 SW-SHINGO PIC 9. PROCEDURE DIVISION. LOOP. ACCEPT SW-SHINGO. EVALUATE SW-SHINGO WHEN AKA DISPLAY '信号赤:停まれ' WHEN AO DISPLAY '信号青:進んでよし' WHEN KI DISPLAY '信号黄:できたら停まって' WHEN OWARI DISPLAY 'おわり' STOP RUN WHEN OTHER DISPLAY '信号こわれてる' END-EVALUATE. GO TO LOOP. STOP RUN.
ねっ、わかりやすい。
一工夫として、集団項目で、信号(SHINGO)の定数(CNS)だよと宣言しています。
使われなくても集団項目を使うのはいいことです。そのことについてもっと詳しく書いてみたいです。
(スミマセン。誰かCOBOLで定数の定義の仕方教えてください。)
ところで、なぜ GO TO を使っているのでしょうか?
それはね、私が GO TO が好きだから。
理由はまた今度。
ちなみに、参考文献はこちら・・・
http://www5.plala.or.jp/shirokaze/cobol/htcobol.html#variable
http://www5.plala.or.jp/shirokaze/cobol/cobol-cygwin.html
http://www16.plala.or.jp/hiyokogumi/