導入:なぜ「FUNCTION」が重要なのか
COBOLといえば「長くて複雑な記述」というイメージがあるかもしれません。しかし、現在のCOBOL(COBOL85以降や、近年の標準規格)では、便利な「組込関数」が用意されています。これらを呼び出すために不可欠なのが「FUNCTION」キーワードです。これを使いこなせば、これまで何十行もかけていた計算処理や文字列操作を、たった1行で解決できるようになります。
基礎知識:組込関数とは?
COBOLにおける「組込関数」とは、あらかじめ言語仕様として定義されている便利な計算・処理ツールのことです。例えば、平方根を求める、文字列の長さを測る、現在の日付を取得する、といった処理がこれに当たります。
他のプログラミング言語では関数名だけで呼び出せるものも多いですが、COBOLでは「FUNCTION」というキーワードを頭につけるという明確なルールがあります。これにより、コンパイラに対して「これは変数ではなく、関数を呼び出しているんだな」と正しく伝えることができます。
実装:FUNCTIONの書き方
基本的には、値が必要な場所であればどこでも記述可能です。代入文の右辺や、条件判定の式の中でも使えます。
基本構文:
FUNCTION 関数名 (引数1, 引数2, …)
例えば、数値の絶対値を求めるなら「FUNCTION ABS(数値)」、文字列の長さを求めるなら「FUNCTION LENGTH(文字列)」のように記述します。
サンプルプログラム
以下のコードは、数値の計算と文字列操作の簡単な例です。コピーして、お手元の環境でコンパイルして試してみてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. FUNC-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM PIC S9(4) VALUE -125.
01 WS-RESULT PIC S9(4).
01 WS-TEXT PIC X(20) VALUE ‘HELLO COBOL’.
01 WS-LEN PIC 9(2).
PROCEDURE DIVISION.
> 数値の絶対値を求める関数
COMPUTE WS-RESULT = FUNCTION ABS(WS-NUM)
DISPLAY “絶対値の結果: ” WS-RESULT
> 文字列の長さを取得する関数
COMPUTE WS-LEN = FUNCTION LENGTH(TRIM(WS-TEXT))
DISPLAY “文字列の有効な長さ: ” WS-LEN
STOP RUN.
応用・注意点:現場で陥りやすい罠
1. 括弧の対応: 関数には必ず引数を囲むための括弧が必要です。引数がない関数(例えば現在日時を取得するFUNCTION CURRENT-DATEなど)であっても、括弧は省略できないものが多いので注意してください。
2. データ型の一致: 組込関数が返す値の型(整数か、浮動小数点かなど)を意識してください。特に計算結果を格納するデータ項目のPIC句が小さすぎると、桁落ちが発生してバグの原因になります。
3. コンパイラのバージョン: 非常に古いCOBOL環境では、一部の組込関数がサポートされていない場合があります。利用するコンパイラのマニュアルで、使用したい関数が対応しているか必ず確認しましょう。
「FUNCTION」を使いこなせると、コードが格段に読みやすく、かつ保守しやすくなります。ぜひ積極的に活用してみてください!

コメント