導入
COBOLのコードを初めて見ると、独特の「余白の多さ」に驚くかもしれません。行の先頭に妙な空白があったり、決まった位置から書き始めたり——これはCOBOLが パンチカード で書かれていた時代の名残です。この章のルールを理解しておくと、以降のすべてのコード例が読みやすくなります。
説明
COBOLの伝統的な書式(固定形式 / フィックスフォーマット)は、1行80文字のパンチカードを前提に設計されました。1行の中の「どの列(カラム)に何を書くか」が厳密に決められています。
graph LR
A["1〜6列<br/>行番号領域<br/>(パンチカードの通し番号用)"] --> B["7列目<br/>インジケータ欄<br/>(* でコメント / - で継続行)"]
B --> C["8〜11列<br/>Area A<br/>(DIVISION・SECTION・段落名・01/77レベル)"]
C --> D["12〜72列<br/>Area B<br/>(ほとんどの記述はここ)"]
D --> E["73〜80列<br/>無視される<br/>(パンチカードの識別番号用だった)"]
- 1〜6列(行番号領域) … かつてはカードの通し番号を書く場所でした。今は空白のままで構いません。
- 7列目(インジケータ欄) …
*を置くとその行はコメント、-を置くと前の行から文字列や単語を継続する行になります。 - 8〜11列(Area A) … DIVISION名・SECTION名・段落名、
01/77レベル番号など「見出し」に相当するものはここから書き始めます。 - 12〜72列(Area B) … それ以外のほとんどの文(
DISPLAYやMOVEなど)はここから書きます。Area Aより右であれば厳密な列にこだわる必要はありません。 - 73〜80列 … コンパイラに無視されます。パンチカードの識別番号を書く欄だった名残です。
固定形式で書くと、次のようになります(見た目のため列の目印として 1234567890... を添えています)。
1234567890123456789012345678
*> これはコメント(7列目に *)
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, world!".
STOP RUN.
IDENTIFICATION DIVISION. は8列目から(Area A)、DISPLAY "Hello, world!". は12列目から(Area B)始まっています。この本コースのコード例も、以降すべてこの慣習に沿って書きます。
一方、COBOL-2002以降は 自由形式(フリーフォーマット) も使えるようになりました。ソースの先頭に >>SOURCE FREE という指示を書くと、列の制約から解放され、他の多くの言語と同じように好きな位置から書けます。
>>SOURCE FREE
*> 自由形式:列の制約がなく、好きな位置から書ける
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, world!".
STOP RUN.
このコースでは、以降のコード例は基本的に 固定形式の慣習(8列目からArea A、12列目からArea B) で統一して示します。実際の現場でも固定形式のコードに触れる機会は多いため、ここでしっかり感覚をつかんでおきましょう。
試すには
上の2つの例を見比べて、「同じ処理でも書式のルールが違うだけ」ということを確認してください。次のレッスンで実際に手元の環境にGnuCOBOLを入れたら、両方の形式を試してみるとルールの違いが体感できます。