【COBOL学習|豆知識】COBOLの組込関数でスマートに!『MAX関数』を使いこなすコツ

導入

業務システムにおいて、複数の数値から最大値を判定する処理は頻繁に発生します。従来、IF文を連ねたり、PERFORMでループさせて比較値を保持したりと、冗長なコードを書いていた方も多いのではないでしょうか。COBOLの『MAX関数』を活用すれば、これらの処理をわずか1行で記述可能です。コードの可読性を高め、保守性を向上させるために、ぜひこの関数を使いこなしましょう。

基礎知識

MAX関数は、COBOL 85以降の標準規格で導入された「組込関数(Intrinsic Functions)」の一つです。引数に指定した複数の値、あるいはテーブル(配列)の中から、もっとも大きい値を自動的に抽出して返却してくれます。数値だけでなく、英数字(文字列)の比較にも対応しており、文字コードの順序(昇順)に基づいて最大値を決定します。

実装/解決策

MAX関数を利用する際は、必ず COMPUTE 文と組み合わせて使用します。引数には個別のデータ項目をカンマ区切りで指定するほか、テーブルを指定することも可能です。テーブル全体を一度に評価できるため、配列内の最大値を探すためにわざわざループを回す必要がなくなります。

サンプルプログラム

以下のコードは、数値テーブルの中から最大値を取得する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. MAX-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.

  • 比較対象のテーブル

01 WS-TABLE.
05 WS-VAL PIC 9(03) OCCURS 5 TIMES VALUE 10, 50, 30, 90, 20.

  • 結果格納用

01 WS-MAX-VAL PIC 9(03).

PROCEDURE DIVISION.

  • テーブル内の5つの要素から最大値を取得する
  • ALLキーワードを使うことでテーブル全体を指定できる

COMPUTE WS-MAX-VAL = FUNCTION MAX(WS-VAL(ALL))

DISPLAY “最大値は: ” WS-MAX-VAL

GOBACK.

応用・注意点

現場で活用する際の注意点は、「型の不一致」です。MAX関数は引数の型を自動的に判定しますが、数値と英数字を混在させると予期せぬ結果やコンパイルエラーを招くことがあります。基本的には「数値なら数値のグループ」「英数字なら英数字のグループ」と型を揃えて使用してください。

また、古いCOBOLコンパイラ環境では組込関数がサポートされていない場合があります。自身の環境が関数に対応しているか、マニュアルを確認してから導入するようにしましょう。シンプルで強力なMAX関数を使い、無駄なIF文を減らしてスッキリとしたソースコードを目指してくださいね。

コメント

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