導入
業務システムにおいて、複数の数値から最大値を判定する処理は頻繁に発生します。従来、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文を減らしてスッキリとしたソースコードを目指してくださいね。

コメント