1. 導入:なぜ定数の表記にこだわるのか
COBOLの現場でソースコードをレビューしていると、ZERO、ZEROS、ZEROESと、人によって表記がバラバラなことに気づくことはありませんか?これらはすべて「0」を表現する「表意定数」ですが、実は書き方ひとつでプログラムの可読性や保守性が大きく変わります。本日は、この一見些細な「表記のルール」について、ベテランの視点から解説します。
2. 基礎知識:表意定数とは何か
表意定数とは、特定の値を名前で表現する仕組みです。COBOLでは「0」という数字を直接書く代わりに、ZEROといった単語を使って値を代入したり比較したりします。
これらは機能的に全く同じ「0」を指しますが、文法上は単数形(ZERO)と複数形(ZEROS、ZEROES)が存在します。これは英語の文法に合わせたプログラミングを可能にするためのCOBOL特有の配慮であり、状況に応じて使い分けることで、コードの「自然な読みやすさ」を維持できるようになっています。
3. 実装と使い分けの作法
現場では以下のルールで使い分けるのが一般的であり、チーム内のコーディング規約として推奨されます。
・ZERO:単一の項目(数値項目など)に値をセットする際に使用します。シンプルで最も一般的です。
・ZEROS / ZEROES:グループ項目や表(テーブル)全体を初期化する際に使用します。「複数の要素を0にする」というニュアンスをコードで表現したい場合に適しています。
どちらを使ってもコンパイル結果に差はありませんが、混在させると「誰かが適当に書いた」という印象を与えかねません。チームでどちらに統一するかを決めておくことが肝心です。
4. サンプルプログラム
以下に、数値項目とグループ項目を初期化する具体的なコード例を示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. ZERO-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COUNT PIC 9(05).
01 WS-GROUP-AREA.
05 WS-ITEM-A PIC X(10).
05 WS-ITEM-B PIC 9(05).
PROCEDURE DIVISION.
- 数値項目への0代入(単数形を使用)
MOVE ZERO TO WS-COUNT.
- グループ項目全体を0で初期化(複数形を使用することで複数要素の意図を明確にする)
MOVE ZEROES TO WS-GROUP-AREA.
DISPLAY “初期化完了: ” WS-COUNT ” / ” WS-ITEM-B.
GOBACK.
5. 応用・注意点
最後に、現場で注意すべき点を二つ挙げます。
一つ目は「再定義(REDEFINES)」との併用です。グループ項目をZEROSで初期化する際、その中に「英字項目」が含まれていると、数値リテラルである0が英字項目に書き込まれることになります。これはCOBOLの仕様上許可されていますが、データ定義と矛盾する可能性があるため、必ずしも安全とは限りません。
二つ目は「意味の明確化」です。単に「0」を代入するだけでなく、それが「カウンターのクリア」なのか「フラグの初期化」なのかをコメントで補足する癖をつけましょう。定数はあくまで道具であり、プログラムの「意図」を伝える主役は、我々プログラマーの記述であることを忘れないでください。

コメント