0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

COBOLで遊ぼう(1):COBOLの少しおもしろい言語仕様

Last updated at Posted at 2025-10-05

はじめに

今どき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.が正解のように見えて騙されます)

cobol-quiz-20250922.jpg

似たような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社)の人間ではありません。単なる一(いち)プログラマーです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?