【COBOL】引数の活用方法TOP10を初心者向けに解説

COBOLの引数を使いこなすプログラマーのイメージCOBOL
この記事は約22分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

COBOL(Common Business Oriented Language)は、ビジネスと金融業界で広く使用されているプログラミング言語です。

この記事を読めば、COBOLの基本的な概念、特に「引数」の使い方を初心者でも理解し、活用することができるようになります。

実際のサンプルコードを通じて、COBOLの引数の使い方を段階的に学ぶことができます。

●COBOLの基礎知識

COBOLは、1959年に開発された古い言語ですが、その信頼性と処理能力の高さから、今日でも多くの企業システムで使われています。

COBOLは特に大量のデータを処理する金融機関や保険会社、政府機関などで重宝されています。

この言語の特徴は、英語に近い文法を有しており、読みやすいコードを書くことができる点です。

しかし、新しいプログラミング言語と比較すると、やや古風な構文を持つため、現代のプログラマーにとっては少々取り込みにくい側面もあります。

○COBOLとは何か?

COBOLは「共通ビジネス指向言語」と訳され、その名の通り、ビジネス分野でのデータ処理に特化した言語です。

COBOLのコードは、その明確さと構造のため、大規模なビジネスアプリケーションの開発に適しています。

例えば、顧客情報の管理や財務報告など、複雑なデータを扱う業務に多く用いられています。

○COBOLの歴史と現代での重要性

COBOLは、コンピューター技術の黎明期に開発され、その後数十年にわたって業界標準の地位を築きました。

現在では新しい言語に取って代わられつつありますが、既存のシステムがCOBOLで書かれているため、その知識は依然として価値があります。

特に、古いシステムの保守や更新を担うプログラマーには必須のスキルです。

また、最近では、COBOLプログラマーの不足が指摘されており、この言語を習得することはキャリアの選択肢を広げる可能性もあります。

●引数の基本

COBOLにおける「引数」とは、プログラムやサブルーチンに渡されるデータを指します。

これは他のプログラミング言語と同様、関数やプロシージャが外部からデータを受け取るための手段です。

COBOLの引数は、特にデータの流れを制御し、プログラム間で情報を交換するために重要な役割を果たします。

○引数とは何か?

引数は、プログラムが実行される際に、他の部分からデータを受け取るための変数やパラメータです。

例えば、ユーザーからの入力、ファイルからのデータ、または他のプログラムからのデータなど、さまざまな情報が引数としてプログラムに渡されることがあります。

これにより、プログラムはより柔軟に、さまざまなシナリオで動作することが可能になります。

○COBOLにおける引数の役割

COBOLプログラムにおける引数の主な役割は、データの伝達とプログラムの再利用性の向上です。

引数を使用することで、プログラムは特定のデータに依存することなく、異なるデータセットで再利用することが可能になります。

また、引数を通じてプログラム間でデータをやり取りすることで、より大きなシステムの一部として機能し、全体の効率を高めることができます。

例えば、顧客データベースから特定の顧客情報を取得するプログラムは、引数を通じて顧客IDを受け取り、それに基づいてデータを検索・処理することができます。

これにより、同じコードを異なる顧客IDで繰り返し使用することができ、開発の効率化とメンテナンスの容易さが実現されます。

●引数の使い方

COBOLにおける引数の使い方は、プログラムの構造や目的に応じて変わります。

引数は、サブルーチンや関数にデータを渡す際に不可欠であり、正しい使い方を理解することはCOBOLプログラミングの基本です。

○サンプルコード1:基本的な引数の渡し方

COBOLで関数やサブルーチンに引数を渡す基本的な方法は、CALL文を使用することです。

ここでは、引数を1つだけ受け取るサブルーチンへの呼び出し方を表すサンプルコードを紹介します。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUMBER PIC 9(4) VALUE 1234.
       PROCEDURE DIVISION.
           CALL 'SUBROUTINE' USING NUMBER.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBROUTINE.
       DATA DIVISION.
       LINKAGE SECTION.
       01 NUMBER PIC 9(4).
       PROCEDURE DIVISION USING NUMBER.
           DISPLAY 'Received number: ' NUMBER.
           STOP RUN.

このコードでは、’MAIN-PROGRAM’が’SUBROUTINE’を呼び出し、’NUMBER’という引数を渡しています。

‘SUBROUTINE’では、受け取った引数を表示しています。

○サンプルコード2:複数の引数を使用する方法

複数の引数を関数やサブルーチンに渡す場合、CALL文のUSING節に引数を列挙します。

下記のサンプルコードは、2つの数値引数を受け取り、その合計を表示するサブルーチンの例です。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM1 PIC 9(4) VALUE 1234.
       01 NUM2 PIC 9(4) VALUE 5678.
       PROCEDURE DIVISION.
           CALL 'SUM-SUBROUTINE' USING NUM1 NUM2.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUM-SUBROUTINE.
       DATA DIVISION.
       LINKAGE SECTION.
       01 NUM1 PIC 9(4).
       01 NUM2 PIC 9(4).
       01 SUM PIC 9(4).
       PROCEDURE DIVISION USING NUM1 NUM2.
           ADD NUM1 TO NUM2 GIVING SUM.
           DISPLAY 'Sum: ' SUM.
           STOP RUN.

ここでは、’NUM1’と’NUM2’の2つの引数を’SUM-SUBROUTINE’に渡して、その合計を計算し表示しています。

○サンプルコード3:引数を使ったデータの操作

引数を使ってより複雑なデータ操作を行うことも可能です。

下記の例では、引数として渡された配列(表)の要素を処理するサブルーチンを表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUMBERS-TABLE.
          05 NUM PIC 9(4) OCCURS 10 TIMES.
       PROCEDURE DIVISION.
           PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
               MOVE I TO NUMBERS-TABLE (I)
           END-PERFORM.
           CALL 'PROCESS-TABLE' USING NUMBERS-TABLE.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROCESS-TABLE.
       DATA DIVISION.
       LINKAGE SECTION.
       01 NUMBERS-TABLE.
          05 NUM PIC 9(4) OCCURS 10 TIMES.
       PROCEDURE DIVISION USING NUMBERS-TABLE.
           PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
               DISPLAY 'Element ' I ' is ' NUMBERS-TABLE (I)
           END-PERFORM.
           STOP RUN.

このコードでは、10要素の配列’NUMBERS-TABLE’を作成し、その各要素を’SUBROUTINE’に渡しています。

サブルーチンでは、配列の各要素を表示しています。

●引数の応用例

COBOLプログラミングにおいて、引数は多様な方法で応用されます。

ここでは、引数を使った条件分岐やループ処理の具体的な例を見ていきましょう。

これらのテクニックは、プログラムの柔軟性を高め、より複雑なタスクを効率的に処理するのに役立ちます。

○サンプルコード4:引数を使った条件分岐

条件分岐はプログラミングにおいて非常に一般的な概念であり、引数の値に基づいて異なるアクションを実行するのに使用されます。

下記のサンプルコードは、引数として受け取った数値が特定の条件を満たすかどうかに基づいて、異なるメッセージを表示する例です。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 INPUT-NUMBER PIC 9(4).
       PROCEDURE DIVISION.
           ACCEPT INPUT-NUMBER.
           CALL 'CHECK-NUMBER' USING INPUT-NUMBER.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CHECK-NUMBER.
       DATA DIVISION.
       LINKAGE SECTION.
       01 NUMBER PIC 9(4).
       PROCEDURE DIVISION USING NUMBER.
           IF NUMBER > 1000
               DISPLAY 'The number is greater than 1000.'
           ELSE
               DISPLAY 'The number is less than or equal to 1000.'
           END-IF.
           STOP RUN.

このコードでは、ユーザーから入力された数値が1000より大きいかどうかを判定し、結果に応じて異なるメッセージを表示しています。

○サンプルコード5:引数を活用したループ処理

ループ処理は繰り返しのタスクを自動化するのに便利で、引数を用いてループの動作を制御することができます。

下記の例は、引数として渡された回数だけ特定の処理を繰り返すサブルーチンを表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 REPEAT-COUNT PIC 9(4) VALUE 5.
       PROCEDURE DIVISION.
           CALL 'REPEAT-ACTION' USING REPEAT-COUNT.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. REPEAT-ACTION.
       DATA DIVISION.
       LINKAGE SECTION.
       01 COUNT PIC 9(4).
       PROCEDURE DIVISION USING COUNT.
           PERFORM VARYING I FROM 1 BY 1 UNTIL I > COUNT
               DISPLAY 'This is repetition number ' I
           END-PERFORM.
           STOP RUN.

このサンプルでは、’REPEAT-COUNT’という引数が’5’に設定されており、’REPEAT-ACTION’サブルーチンは指定された回数だけメッセージを表示します。

○サンプルコード6:引数を使ったファイル操作

COBOLにおいて、ファイル操作はビジネスアプリケーションにおける重要な要素の一つです。

引数を使用してファイル名やデータを動的に扱うことで、プログラムの柔軟性を高めることができます。

下記のサンプルコードは、引数として渡されたファイル名でファイルを開き、データを処理する方法を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 FILE-NAME PIC A(20) VALUE 'datafile.txt'.
       PROCEDURE DIVISION.
           CALL 'FILE-OPERATION' USING FILE-NAME.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. FILE-OPERATION.
       DATA DIVISION.
       LINKAGE SECTION.
       01 FILE-NAME PIC A(20).
       FILE SECTION.
       FD  DATA-FILE.
       01  DATA-REC PIC A(80).
       PROCEDURE DIVISION USING FILE-NAME.
           OPEN INPUT DATA-FILE.
           READ DATA-FILE INTO DATA-REC END-READ.
           CLOSE DATA-FILE.
           STOP RUN.

このサンプルでは、メインプログラムが’FILE-NAME’を引数として’FILE-OPERATION’サブルーチンに渡し、ファイル操作を行っています。

○サンプルコード7:引数を使ったデータベース接続

引数を使ってデータベース接続の情報を渡すことも可能です。

下記のサンプルでは、データベース名とユーザー情報を引数として受け取り、データベースへの接続を行うプロセスを表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DB-CONNECTION-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 DB-NAME PIC A(20) VALUE 'MYDATABASE'.
       01 USER-ID PIC A(10) VALUE 'admin'.
       PROCEDURE DIVISION.
           CALL 'DB-CONNECT' USING DB-NAME USER-ID.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DB-CONNECT.
       DATA DIVISION.
       LINKAGE SECTION.
       01 DB-NAME PIC A(20).
       01 USER-ID PIC A(10).
       PROCEDURE DIVISION USING DB-NAME USER-ID.
           DISPLAY 'Connecting to database ' DB-NAME ' with user ' USER-ID.
           STOP RUN.

この例では、データベース名とユーザーIDを引数として受け取り、データベース接続の準備を行っています。

○サンプルコード8:引数を使ったエラー処理

引数はエラー処理の文脈でも役立ちます。

エラーメッセージやコードを引数として受け取り、適切なエラー処理を行うことが可能です。

下記のコードは、エラーコードを引数として受け取り、そのエラーに応じた処理を行う例です。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ERROR-HANDLING-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ERROR-CODE PIC 9(2) VALUE 1.
       PROCEDURE DIVISION.
           CALL 'HANDLE-ERROR' USING ERROR-CODE.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HANDLE-ERROR.
       DATA DIVISION.
       LINKAGE SECTION.
       01 ERROR-CODE PIC 9(2).
       PROCEDURE DIVISION USING ERROR-CODE.
           EVALUATE ERROR-CODE
               WHEN 1
                   DISPLAY 'File not found.'
               WHEN 2
                   DISPLAY 'Invalid input.'
               WHEN OTHER
                   DISPLAY 'Unknown error.'
           END-EVALUATE.
           STOP RUN.

このコードでは、異なる種類のエラーに対して異なるメッセージを表示することで、エラー処理を行っています。

○サンプルコード9:引数を使ったモジュールの作成

COBOLプログラミングにおいて、モジュールは再利用可能なコードの単位として非常に重要です。

引数を用いることで、モジュールをさらに汎用的かつ柔軟にすることができます。

下記のサンプルコードでは、引数を用いて汎用的なデータ処理モジュールを作成する方法を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DATA-PROCESSING-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 DATA-ITEM PIC A(20) VALUE 'Example Data'.
       PROCEDURE DIVISION.
           CALL 'DATA-PROCESSING-MODULE' USING DATA-ITEM.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DATA-PROCESSING-MODULE.
       DATA DIVISION.
       LINKAGE SECTION.
       01 DATA-ITEM PIC A(20).
       PROCEDURE DIVISION USING DATA-ITEM.
           DISPLAY 'Processing data: ' DATA-ITEM.
           STOP RUN.

このコードでは、データ項目を引数として’DATA-PROCESSING-MODULE’に渡し、モジュール内でデータを処理しています。

○サンプルコード10:引数を使った効率的なプログラミング

効率的なプログラミングは、特に大規模なアプリケーション開発において重要です。

引数を利用することで、コードの重複を減らし、メンテナンスを容易にすることができます。

下記のサンプルでは、引数を使ってデータ検証ルーチンを汎用化する方法を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. VALIDATION-PROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 USER-INPUT PIC A(20) VALUE 'user@example.com'.
       PROCEDURE DIVISION.
           CALL 'VALIDATE-INPUT' USING USER-INPUT.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. VALIDATE-INPUT.
       DATA DIVISION.
       LINKAGE SECTION.
       01 USER-INPUT PIC A(20).
       PROCEDURE DIVISION USING USER-INPUT.
           IF USER-INPUT IS NUMERIC
               DISPLAY 'Input is numeric.'
           ELSE
               DISPLAY 'Input is not numeric.'
           END-IF.
           STOP RUN.

この例では、ユーザー入力を引数として渡し、’VALIDATE-INPUT’モジュール内でその入力が数値かどうかを検証しています。

●注意点と対処法

COBOLプログラミングにおいて引数を使用する際には、特定の注意点があります。

これらを理解し、適切な対処法を身につけることで、エラーを減らし、効率的かつ安定したプログラムを作成できます。

重要なのは、引数のデータ型とサイズがサブルーチンや関数で期待されるものと一致しているか、引数に渡される値が処理可能な範囲内であるか、そしてCALL文とサブルーチンの引数の数が一致しているかという点です。

これらの要素に注意を払うことで、型不一致や範囲外の値によるエラーを避けることができます。

○引数の正しい使い方

引数を使用する際には、引数のデータ型、サイズ、および値が予期されたものであるかを確認することが重要です。

特に、CALL文で使用される引数の数とサブルーチン内で定義されている引数の数が一致することを確認する必要があります。

この一致が取れていない場合、プログラムは予期せぬ挙動を示し、エラーが発生する可能性があります。

そのため、引数の扱い方を正しく理解し、適切にプログラムに適用することが求められます。

○よくあるエラーとその解決方法

COBOLプログラミングにおいては、いくつかの一般的なエラーが発生しやすい傾向にあります。

これらのエラーには型不一致エラー、引数の数不一致エラー、範囲外の値エラーなどがあります。

これらのエラーに対する解決策としては、引数とサブルーチンのパラメータが同じデータ型およびサイズであることを確認し、CALL文とサブルーチンで引数の数が一致していることを保証し、引数に渡す値がサブルーチンで処理可能な範囲内であることを確認することが挙げられます。

これらの一般的な問題を事前に特定し、解決することで、プログラムの安定性と信頼性を高めることができます。

●カスタマイズ方法

COBOLプログラミングにおける引数の使用は、プログラムのカスタマイズ性を高める重要な要素です。

効果的なカスタマイズ方法を理解し実践することで、プログラムの柔軟性と再利用性を大幅に向上させることができます。

カスタマイズを行う際には、プログラムの目的や要件に応じて引数の扱い方を調整し、より効率的で柔軟なプログラムを作成することが求められます。

○引数の応用とカスタマイズのポイント

引数の応用として考えられるのは、引数を使ったデータの動的な処理や、様々な種類のデータに対応可能な汎用的なサブルーチンの作成です。

これにより、同じサブルーチンを異なる状況で再利用することが可能になります。

また、引数を活用することで、プログラムの一部分だけを変更することなく、異なるデータや条件での動作を実現できます。

カスタマイズのポイントとしては、引数のデータ型やサイズ、渡されるデータの内容を適切に設計することが重要です。

サンプルコードを用いて、これらの応用例を示します。

例えば、さまざまな種類のレポートを生成するプログラムがあるとします。

レポートの種類や内容を引数としてサブルーチンに渡すことで、同一のサブルーチンを用いて異なる形式のレポートを生成できます。

このようなアプローチは、プログラムの再利用性を高め、保守性を向上させるのに役立ちます。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. REPORT-GENERATOR.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 REPORT-TYPE PIC A(10) VALUE 'FINANCE'.
       01 REPORT-DATA PIC A(100) VALUE 'Financial Data for 2023'.
       PROCEDURE DIVISION.
           CALL 'GENERATE-REPORT' USING REPORT-TYPE, REPORT-DATA.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. GENERATE-REPORT.
       DATA DIVISION.
       LINKAGE SECTION.
       01 REPORT-TYPE PIC A(10).
       01 REPORT-DATA PIC A(100).
       PROCEDURE DIVISION USING REPORT-TYPE, REPORT-DATA.
           IF REPORT-TYPE = 'FINANCE' THEN
               PERFORM FINANCE-REPORT-PROCESSING USING REPORT-DATA
           ELSE
               PERFORM GENERAL-REPORT-PROCESSING USING REPORT-DATA
           END-IF.
           STOP RUN.

このサンプルコードでは、引数REPORT-TYPEREPORT-DATAを用いて、異なるタイプのレポートを生成する処理を実装しています。

これにより、同じサブルーチンを使って異なるタイプのレポートを柔軟に生成できるようになります。

まとめ

この記事では、COBOLにおける引数の基本的な使い方から応用方法に至るまで、初心者でも理解しやすいように詳細に解説しました。

COBOLプログラミングにおいて引数は、プログラムの柔軟性、再利用性、および汎用性を高めるための重要なツールです。

引数を適切に活用することで、データの動的な処理や条件に基づいたプログラムの実行が可能になり、開発の効率が大幅に向上します。

この記事が、COBOLプログラミングを学ぶすべての人々にとって有用な参考資料となることを願っています。