【COBOL学習|初心者向け】熟練プログラマが教える!COMPUTE文でABS関数をスマートに使いこなすコツ

なぜABS関数の「式内利用」が重要なのか

COBOL開発の現場でよくある課題の一つが、計算結果の「符号」の扱いです。例えば、売上と仕入の差額を計算する際、マイナス値が出てはいけない場面や、単に「差の大きさ」だけが必要な場面に出くわします。初心者の方は、わざわざIF文を使って「もしマイナスなら-1を掛ける」といった処理を書きがちですが、これではコードが冗長になり、可読性も下がります。ABS関数をCOMPUTE文の式内で直接使うことで、一時変数を使わずに、スッキリとした論理記述が可能になります。

ABS関数の基礎知識

ABS関数は「Absolute Value(絶対値)」の略で、対象となる数値の符号を取り除き、常に0または正の値を返す組み込み関数です。COBOLでは、この関数を計算式の一部として組み込むことができます。特に重要なのは、COMPUTE文のような算術式の中で、他の演算子(+、-、、/)と組み合わせて使用できるという点です。これにより、複雑なビジネスロジックを1行の計算式として簡潔に表現できるようになります。

実装のポイント

実装のコツは「計算の順序」を意識することです。COMPUTE文では、カッコ内の計算が優先されます。ABS関数も同様で、FUNCTION ABS(…) のカッコ内に計算式を記述すれば、その結果に対して絶対値処理が行われます。一時変数(作業領域)を宣言して値を移し替える手間が省けるため、コードの行数を削減できるだけでなく、バグの混入リスクを低減させることができます。

サンプルプログラム

以下のサンプルは、2つの数値の差の絶対値を求め、それを基に調整値を算出する例です。そのままコピー&ペーストして動作を確認してみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. ABS-EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VAL-A PIC S9(5) VALUE 100.
01 VAL-B PIC S9(5) VALUE 150.
01 ADJUST-VAL PIC S9(5) VALUE 10.
01 RESULT PIC S9(5).

PROCEDURE DIVISION.
> 差の絶対値に調整値を足す計算
> 一時変数を使わず、COMPUTE文内でABS関数を直接利用
COMPUTE RESULT = FUNCTION ABS(VAL-A – VAL-B) + ADJUST-VAL.

DISPLAY “差の絶対値 + 調整値の結果: ” RESULT.

STOP RUN.

応用と注意点

現場で役立つ補足として、ABS関数を使用する際は「演算結果の桁あふれ(オーバーフロー)」に注意してください。計算式の結果が定義した変数の桁数(PIC句)を超えてしまうと、プログラムが異常終了したり、予期せぬ値になったりします。特に、引き算の結果が非常に大きなマイナス値になる可能性がある場合は、計算結果を受け取る変数の桁数を十分に確保しておくことが鉄則です。また、ABS関数はあくまで「値」を返す関数ですので、PIC句の定義が符号付き(S9…)であるかも忘れずにチェックしてください。これらを意識するだけで、あなたの書くCOBOLコードは一段とプロフェッショナルなものになります。

コメント

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