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/