はじめに
今どきCOBOLと言われつつもしぶとく生き残っているCOBOLです。
自虐ネタではなくて、COBOL言語で楽しめるようなネタを書けないものかと思いました。
ということで、他のプログラム言語に比べて、コンパイラという観点からCOBOL言語がちょっとおもしろいな、と思う部分を紹介します。
極めてニッチなネタなので、ほとんどの人にはささらないかもしれませんが。
マイナスがデータ名に使える
009500 WORKING-STORAGE SECTION.
009600 01 A PIC 9(5) VALUE 4.
009700 01 B PIC 9(5) VALUE 1.
009800 01 C PIC 9(5) .
009900 01 A-B PIC 9(5) VALUE 2.
010000 PROCEDURE DIVISION.
010100 COMPUTE C=A-B *> これは「A-B」というデータ名
010200 DISPLAY 'C=' C .
010300 COMPUTE C = A - B . *> こちらは減算
010400 DISPLAY 'C=' C .
実行結果
C=00002
C=00003
ピリオドが後ろの文字で意味が変わる
009610 01 AAA PIC 999. *> PICTURE文字列999と終止符の.
009620 01 BBB PIC 999.. *> PICTURE文字列999.と終止符の.
009630 01 CCC PIC 999. . *> PICTURE文字列999と終止符の.が2個
010000 PROCEDURE DIVISION.
010200 MOVE 3.4 TO AAA BBB CCC.
010300 DISPLAY AAA.
010400 DISPLAY BBB.
010500 DISPLAY CCC.
実行結果
3
3.
3
2番目のものだけ . がついている点に注意
実行は「Windows版 Rocket Visual COBOL Personal Edition Version 10.0.0.82 」を使っています。
ピリオドが強力なストッパー
COBOLでは文の終わりをピリオドで示します。文自体はネスト可能なのでピリオドが重要な意味を持ちます。以下はMicroFocus社がかつて提供していたCOBOLクイズの問題です。
(a.が正解のように見えて騙されます)
似たようなUSAGE(データの形式)が多い
COBOLではデータ項目を定義するときに、データ項目の形式をUSAGEで細かく指定できます。そのUSAGEの種類がいろいろあります。
USAGE COMP
USAGE COMP-1
USAGE COMP-2
USAGE COMP-3
これらの違いを覚えるのに最初苦労します。
そのうち各ベンダーが拡張機能をつくり
USAGE COMP-4
USAGE COMP-5
などというものがあったり、さらにはラスボス感のある名前
USAGE COMP-X
が出てきました。
USAGEの何と何が同じ意味になるのか、マニア向けのクイズになりそうです。
私はRocketsoftware社(MicroFocus社)の人間ではありません。単なる一(いち)プログラマーです。