【COBOL学習|初心者向け】モダンCOBOLの作法:INVOKE文における「引数省略」をマスターしよう

なぜ引数の省略が重要なのか

COBOLのオブジェクト指向機能(COBOL 2002以降)では、JavaやC#のような他言語と連携する機会が増えています。かつてのCOBOLは「すべての引数をきっちり書く」のが当たり前でしたが、モダンな環境では「必要な引数だけを渡す」という柔軟性が求められます。このルールを理解することで、コードがスッキリするだけでなく、他言語で作成されたライブラリとの連携ミスを大幅に減らすことができます。

基礎知識:INVOKE文とメソッド呼び出し

INVOKE文は、オブジェクトに対してメソッドを実行するための命令です。
メソッドとは、オブジェクトに備わっている「処理の塊」のことです。例えば「口座オブジェクト」に対して「残高を取得する」「名前を変更する」といった操作を依頼するイメージです。
従来のCOBOLでは、引数がない場合でもダミーの引数を渡す必要があったり、すべての引数を網羅しなければならなかったりと、冗長な書き方が必要でした。しかし、モダンなCOBOLでは「USING句の省略」が可能になり、より直感的な記述ができるようになりました。

実装のルール

1. 引数がない場合:USING句そのものを記述する必要はありません。
2. オプション引数がある場合:メソッド定義で「後続の引数を省略可能」と設定されている場合、必要な引数までを指定して残りを省略することができます。
これにより、API仕様が変わった際や、デフォルト値で十分な場合に、呼び出し側のコードを書き直す手間が省けます。

サンプルプログラム

以下は、引数なしのメソッド呼び出しと、オプション引数を活用する例です。

  • --- メソッド呼び出しのサンプル ---
WORKING-STORAGE SECTION. 01 WS-ST PIC X(10). 01 WS-DATE PIC X(08) VALUE "20231027". 01 AccountObj USAGE OBJECT REFERENCE. PROCEDURE DIVISION.
  • 1. 引数を持たないメソッドの呼び出し
  • USING句を省略して記述可能
INVOKE AccountObj "GetStatus" RETURNING WS-ST.
  • 2. オプション引数(後続拡張)を持つメソッドの呼び出し
  • 第1引数(日付)のみ渡し、第2引数以降を省略する例
INVOKE AccountObj "UpdateHistory" USING WS-DATE. GOBACK.

応用・注意点:現場で陥りやすい罠

現場で最も多いミスは、「省略可能かどうかの仕様確認不足」です。
すべてのメソッドが引数を省略できるわけではありません。呼び出し先のクラス定義(またはAPI仕様書)を確認し、「Optional」や「後続拡張」として定義されている引数のみが省略可能です。

また、古いCOBOLコンパイラ環境で無理に省略記法を使おうとすると、コンパイルエラーになります。必ずプロジェクトの環境が「COBOL 2002」以降の規格に準拠しているかを確認してから活用してください。コードの可読性を高めるために、引数が不要な場合は積極的に省略し、シンプルで保守しやすいプログラムを目指しましょう。

コメント

タイトルとURLをコピーしました