【COBOL】IF THEN ELSE関数の10の使い方

COBOLプログラミングの基礎、IF THEN ELSE関数を徹底解説するイメージCOBOL
この記事は約19分で読めます。

 

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

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

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

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

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

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

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

はじめに

この記事を読めば、COBOL言語のIF THEN ELSE関数の使い方を10の具体的な例と共に解説します。

COBOLは、長い歴史を持ち、現代の多くのシステムで活用されている伝統的なプログラミング言語です。

特に、IF THEN ELSE関数はプログラミングにおいて重要な概念であり、COBOLにおいてもその重要性は変わりません。

初心者にもわかりやすく、実際のコード例を交えながら、この関数の使い方を徹底的に解説していきます。

●COBOLとは

COBOL(Common Business-Oriented Language)は、ビジネス用途に特化したプログラミング言語で、1959年に開発されました。

主に金融機関や政府機関などで広く使用されており、現在でもその需要は高いままです。

COBOLの特徴は、その読みやすい構文にあります。

英語に近い文法を採用しており、プログラムが自然言語に近い形で書けるため、プログラミング初心者にも理解しやすいのが大きな利点です。

また、長年にわたる使用により、信頼性と安定性が高いこともこの言語の特徴です。

○COBOLの歴史と特徴

COBOLは、企業の経理や管理システムを中心に用いられ、その信頼性の高さから長年にわたり利用されてきました。

初期のコンピューターシステムの多くがCOBOLで書かれていたことから、古いシステムの保守・更新にも頻繁に使われています。

COBOLの構文は、英語のように「主語-述語-目的語」の順序で記述されることが多く、読みやすさと書きやすさを兼ね備えています。

これにより、ビジネスロジックを直感的にコードに落とし込むことが可能です。

○なぜ今もCOBOLが重要なのか

COBOLが今日でも重要である理由は、多くの企業や政府機関で使用されている古いシステムがCOBOLで書かれているからです。

これらのシステムは、銀行取引、給与計算、顧客データ管理など、日常業務の核となる部分を支えています。

新しい技術への移行が進んでいるとはいえ、これらのシステムの安定稼働が社会の基盤となっており、COBOLの知識は依然として価値があります。

また、COBOLプログラマーの高齢化と専門家の不足が問題となっており、この言語を理解し、システムを保守・更新できる人材は引き続き求められています。

●IF THEN ELSE関数の基本

COBOL言語におけるIF THEN ELSE関数は、条件分岐を行うための基本的な構文です。

この関数を使用することで、プログラムは特定の条件が満たされた場合にのみ特定の操作を実行するように設計することができます。

例えば、ある数値が特定の範囲内にあるかをチェックし、その結果に基づいて異なる処理を行う場合などに使用します。

この機能は、プログラムの流れを制御し、より複雑なロジックを実装するのに不可欠です。

○IF THEN ELSEとは何か

IF THEN ELSE構文は、「もし(IF)ある条件が真(TRUE)ならば、この処理を実行し(THEN)、そうでなければ(ELSE)、別の処理を実行する」という流れを作り出します。

この構文は、特にビジネスアプリケーションにおいて多用され、データの検証やエラーハンドリング、特定の条件に基づいた処理の実行など、様々な場面で役立ちます。

○IF THEN ELSEの基本構文

COBOLにおけるIF THEN ELSE構文の基本的な形式は次のようになります。

IF [条件式] THEN
    [条件が真の場合に実行する処理]
ELSE
    [条件が偽の場合に実行する処理]
END-IF

ここで、[条件式]は真(TRUE)または偽(FALSE)を返す式であり、この結果に基づいてTHEN節またはELSE節の処理が実行されます。

例えば、ある変数の値が特定の数値以上であるかどうかを判定し、それに基づいて異なるメッセージを出力するプログラムは次のように記述できます。

IF NUM > 100 THEN
    DISPLAY '数値は100より大きいです。'
ELSE
    DISPLAY '数値は100以下です。'
END-IF

この例では、NUMという変数が100より大きい場合と100以下の場合で異なるメッセージを表示しています。

このように、IF THEN ELSE構文を使用することで、条件に応じた柔軟なプログラムの制御が可能になります。

●IF THEN ELSE関数の使い方

COBOLにおけるIF THEN ELSE関数の使い方は多岐にわたります。

基本的な条件分岐から始まり、複数の条件を組み合わせる複雑なロジックまで、この関数はプログラムの流れを柔軟に制御するのに役立ちます。

ここでは、実際のサンプルコードを交えて、その使い方の基本を解説します。

○サンプルコード1:基本的な条件分岐

COBOLにおける最も基本的なIF THEN ELSEの使用例は、単一の条件に基づいて処理を分岐させることです。

下記のサンプルコードでは、ある変数の値が特定の値よりも大きいかどうかをチェックし、その結果に応じて異なるアクションを取ります。

IDENTIFICATION DIVISION.
PROGRAM-ID. SampleProgram.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 NUM PIC 9(4) VALUE 500.
PROCEDURE DIVISION.
   IF NUM > 100 THEN
       DISPLAY '数値は100より大きいです。'
   ELSE
       DISPLAY '数値は100以下です。'
   END-IF.
   STOP RUN.

このコードでは、NUMという変数が100より大きいかどうかを評価し、それに基づいて異なるメッセージを表示します。

このような基本的な条件分岐は、プログラムのロジックを制御するための基礎となります。

○サンプルコード2:複数の条件を組み合わせる

より複雑なシナリオでは、複数の条件を組み合わせて使用することがあります。

下記のサンプルコードでは、2つの変数の値を評価し、それぞれが特定の基準を満たすかどうかに基づいて処理を分岐させます。

IDENTIFICATION DIVISION.
PROGRAM-ID. ComplexCondition.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 NUM1 PIC 9(4) VALUE 75.
   01 NUM2 PIC 9(4) VALUE 150.
PROCEDURE DIVISION.
   IF NUM1 > 50 AND NUM2 < 200 THEN
       DISPLAY '両方の条件が満たされました。'
   ELSE
       DISPLAY '一つまたは両方の条件が満たされませんでした。'
   END-IF.
   STOP RUN.

このコードでは、NUM1が50より大きく、かつNUM2が200未満の場合にのみ、特定のメッセージが表示されます。

AND演算子を使用することで、複数の条件を一度にチェックすることができます。

このような条件の組み合わせは、プログラムの複雑な決定樹やビジネスロジックの実装に不可欠です。

○サンプルコード3:ネストされたIF文

COBOLプログラミングにおいて、IF文をネスト(入れ子)することで、より複雑な条件分岐を表現することが可能です。

ネストされたIF文では、一つのIF文の内部に別のIF文を記述し、複数の条件を階層的に評価します。

下記のサンプルコードは、ネストされたIF文の使用例を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. NestedIfSample.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 NUM-A PIC 9(4) VALUE 75.
   01 NUM-B PIC 9(4) VALUE 50.
PROCEDURE DIVISION.
   IF NUM-A > 100 THEN
       DISPLAY 'NUM-Aは100より大きいです。'
       IF NUM-B > 60 THEN
           DISPLAY 'NUM-Bは60より大きいです。'
       ELSE
           DISPLAY 'NUM-Bは60以下です。'
       END-IF
   ELSE
       DISPLAY 'NUM-Aは100以下です。'
   END-IF.
   STOP RUN.

このプログラムでは、最初にNUM-Aが100より大きいかどうかを評価し、その条件が真であればNUM-Bの値をチェックします。

このようにネストされたIF文を使用することで、複数の条件に基づいてより詳細な処理を実行することができます。

○サンプルコード4:算術演算を含む条件

IF文では算術演算を含む条件も評価できます。

これにより、変数の数値を計算してその結果に基づいて処理を分岐させることが可能です。

下記のサンプルコードでは、複数の変数の合計値が特定の閾値を超えるかどうかをチェックします。

IDENTIFICATION DIVISION.
PROGRAM-ID. ArithmeticCondition.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 NUM-C PIC 9(4) VALUE 40.
   01 NUM-D PIC 9(4) VALUE 30.
   01 SUM-NUM PIC 9(4).
PROCEDURE DIVISION.
   COMPUTE SUM-NUM = NUM-C + NUM-D.
   IF SUM-NUM > 70 THEN
       DISPLAY '合計値は70より大きいです。'
   ELSE
       DISPLAY '合計値は70以下です。'
   END-IF.
   STOP RUN.

このコードでは、まずNUM-CNUM-Dの合計値を計算し、その合計値が70を超えるかどうかを評価します。

このような算術演算を含む条件は、数値計算が必要な場面で特に有効です。

○サンプルコード5:文字列比較を行う条件

COBOLでは文字列の比較もIF文を使用して行うことができます。

文字列の比較を利用することで、特定の文字列に基づいた条件分岐を実装することが可能です。

下記のサンプルコードでは、指定された文字列が一致するかどうかを確認し、その結果に基づいて異なるアクションを取ります。

IDENTIFICATION DIVISION.
PROGRAM-ID. StringCompare.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 STR-A PIC A(10) VALUE 'HELLO'.
   01 STR-B PIC A(10) VALUE 'WORLD'.
PROCEDURE DIVISION.
   IF STR-A = 'HELLO' THEN
       DISPLAY '挨拶はHELLOです。'
       IF STR-B = 'WORLD' THEN
           DISPLAY '挨拶はWORLDです。'
       ELSE
           DISPLAY 'STR-BはWORLDではありません。'
       END-IF
   ELSE
       DISPLAY 'STR-AはHELLOではありません。'
   END-IF.
   STOP RUN.

このプログラムは、まずSTR-Aが’HELLO’と等しいかを評価し、次にSTR-Bが’WORLD’と等しいかを評価します。

このように文字列の比較を行うことで、具体的な文字列の内容に基づいた複雑な処理の流れを作ることができます。

○サンプルコード6:ファイル操作における条件分岐

COBOLではファイル操作も重要な役割を果たします。

IF文を使用して、ファイル操作の結果に基づく条件分岐を実装することが可能です。

下記のサンプルコードでは、ファイルの読み込み操作に成功したかどうかに基づいて異なる処理を行います。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileOperation.
DATA DIVISION.
   FILE SECTION.
   FD  SAMPLE-FILE.
   01  SAMPLE-RECORD PIC X(80).
   WORKING-STORAGE SECTION.
   01  FILE-STATUS PIC 9.
PROCEDURE DIVISION.
   OPEN INPUT SAMPLE-FILE.
   READ SAMPLE-FILE INTO SAMPLE-RECORD
       AT END MOVE 1 TO FILE-STATUS.
   IF FILE-STATUS = 0 THEN
       DISPLAY 'ファイル読み込み成功。'
       DISPLAY SAMPLE-RECORD
   ELSE
       DISPLAY 'ファイル読み込み失敗または終了。'
   END-IF.
   CLOSE SAMPLE-FILE.
   STOP RUN.

このコードでは、ファイルの読み込み操作を試み、その結果をFILE-STATUS変数に基づいて評価します。

ファイルの読み込みが成功した場合は、その内容を表示し、失敗した場合はエラーメッセージを表示します。

このようなファイル操作における条件分岐は、データ処理やエラーハンドリングにおいて非常に重要です。

○サンプルコード7:データベースへのクエリ処理

COBOLプログラムでは、データベースへのクエリ処理も重要な機能の一つです。

データベースからのデータ取得や更新において、条件分岐を利用することで効率的なデータ処理を行うことが可能になります。

下記のサンプルコードでは、データベースから特定の条件に一致するレコードを検索し、結果に基づいて処理を行います。

IDENTIFICATION DIVISION.
PROGRAM-ID. DatabaseQuery.
DATA DIVISION.
   SQLCA.
   EXEC SQL INCLUDE SQLCA END-EXEC.
   WORKING-STORAGE SECTION.
   01 CUSTOMER-ID PIC 9(4).
   01 CUSTOMER-NAME PIC A(30).
PROCEDURE DIVISION.
   MOVE 1234 TO CUSTOMER-ID.
   EXEC SQL
       SELECT NAME INTO :CUSTOMER-NAME
       FROM CUSTOMERS
       WHERE ID = :CUSTOMER-ID
   END-EXEC.
   IF SQLCODE = 0 THEN
       DISPLAY '顧客名: ' CUSTOMER-NAME
   ELSE
       DISPLAY 'エラーが発生しました。'
   END-IF.
   STOP RUN.

このプログラムでは、特定の顧客IDを持つ顧客の名前をデータベースから取得し、取得できた場合はその名前を表示し、エラーが発生した場合はエラーメッセージを表示します。

SQLCODEをチェックすることで、データベース操作の成功または失敗を判断しています。

○サンプルコード8:エラーハンドリング

エラーハンドリングは、プログラムにおいて重要な部分です。

特に、COBOLプログラムにおいては、ファイル操作やデータベース操作など、さまざまな場面でエラーが発生する可能性があります。

下記のサンプルコードでは、ファイルの読み込み時にエラーが発生した場合のハンドリングを表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. ErrorHandler.
DATA DIVISION.
   FILE SECTION.
   FD  REPORT-FILE.
   01  REPORT-RECORD PIC X(80).
   WORKING-STORAGE SECTION.
   01  FILE-STATUS PIC 9.
PROCEDURE DIVISION.
   OPEN INPUT REPORT-FILE.
   READ REPORT-FILE INTO REPORT-RECORD
       AT END MOVE 1 TO FILE-STATUS.
   IF FILE-STATUS = 1 THEN
       DISPLAY 'ファイルの終端に達しました。'
   ELSE
       IF FILE-STATUS = 0 THEN
           DISPLAY 'レポート: ' REPORT-RECORD
       ELSE
           DISPLAY 'ファイル読み込みエラー。'
       END-IF
   END-IF.
   CLOSE REPORT-FILE.
   STOP RUN.

このコードでは、ファイルからのレコード読み込みを試み、その結果に応じて異なるメッセージを表示します。

ファイルの終端に達した場合や、読み込みに失敗した場合にはそれぞれ適切な処理を行います。

このように、エラーハンドリングを適切に行うことで、予期せぬエラーからプログラムを保護し、より堅牢なアプリケーションを作成することができます。

○サンプルコード9:ループ内の条件分岐

COBOLでのループ処理は、繰り返しの処理を行う際に重要です。

ループ内で条件分岐を用いることで、特定の条件に応じてループの動作を変更することができます。

下記のサンプルコードでは、繰り返し処理の中で特定の条件を満たした場合に特定の処理を行います。

IDENTIFICATION DIVISION.
PROGRAM-ID. LoopCondition.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 NUM-COUNTER PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
   PERFORM VARYING NUM-COUNTER FROM 1 BY 1 UNTIL NUM-COUNTER > 10
       IF NUM-COUNTER = 5 THEN
           DISPLAY 'カウンターが5に達しました。'
       ELSE
           DISPLAY '現在のカウンター値: ' NUM-COUNTER
       END-IF
   END-PERFORM.
   STOP RUN.

このコードでは、NUM-COUNTERが1から10まで増加するループ内で、カウンターが5に達したときに特定のメッセージを表示し、それ以外の場合はカウンターの値を表示します。

このようにループ内での条件分岐を用いることで、複雑な繰り返し処理を柔軟に制御できます。

○サンプルコード10:ユーザー入力に基づく条件分岐

ユーザーからの入力に応じた処理は、インタラクティブなアプリケーションにおいて非常に重要です。

COBOLプログラムでもユーザー入力に基づく条件分岐を実装することができます。

下記のサンプルコードは、ユーザーからの入力値に基づいて異なる処理を行う例を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. UserInputCondition.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 USER-CHOICE PIC A(1).
PROCEDURE DIVISION.
   DISPLAY '選択してください(AまたはB): '.
   ACCEPT USER-CHOICE.
   IF USER-CHOICE = 'A' THEN
       DISPLAY 'Aが選択されました。'
   ELSE IF USER-CHOICE = 'B' THEN
       DISPLAY 'Bが選択されました。'
   ELSE
       DISPLAY '無効な選択です。'
   END-IF.
   STOP RUN.

このプログラムでは、ユーザーにAまたはBを選択するよう促し、入力された値に応じて異なるメッセージを表示します。

このように、ユーザー入力に基づく条件分岐を利用することで、ユーザーの選択に応じた動的な処理が可能になります。

●IF THEN ELSE関数の応用例

COBOLにおけるIF THEN ELSE関数は、単なる条件分岐を超えた多様な応用が可能です。

実際の業務では、さまざまなシナリオでこの機能が役立ちます。

例えば、金融システムにおける取引処理や、顧客データベースの管理、レポート生成時のデータチェックなど、ビジネスの要件に応じて柔軟に適用することができます。

○実務での応用シナリオ

金融機関における口座管理システムでは、顧客の取引履歴に基づくレポートを生成する際、IF THEN ELSE関数を用いて特定の条件を満たす取引を抽出することが一般的です。

下記のサンプルコードは、特定の閾値を超える取引を検出し、それに応じた処理を行う例を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. TransactionReport.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 TRANSACTION-AMOUNT PIC 9(5)V99.
   01 REPORT-LINE PIC A(80).
PROCEDURE DIVISION.
   MOVE 1234.56 TO TRANSACTION-AMOUNT.
   IF TRANSACTION-AMOUNT > 1000 THEN
       STRING '大きな取引: $' TRANSACTION-AMOUNT ' の取引が行われました。'
       INTO REPORT-LINE
   ELSE
       STRING '通常の取引: $' TRANSACTION-AMOUNT ' の取引が行われました。'
       INTO REPORT-LINE
   END-IF.
   DISPLAY REPORT-LINE.
   STOP RUN.

このコードでは、取引額が1000ドルを超える場合とそうでない場合で異なるレポートラインを生成しています。

これにより、特定の条件を満たす重要な取引を効率的に特定し、対応するアクションを取ることができます。

このような応用は、金融の分野に限らず、多くのビジネスシナリオで活用できます。

●注意点と対処法

COBOLのIF THEN ELSE関数を使用する際には、特に注意すべき点がいくつかあります。

適切な処理を行うために、これらの注意点を理解し、適切に対処することが重要です。

まず、複雑な条件文では、ネストが深くなりすぎないように注意する必要があります。

深いネストはプログラムの可読性を低下させ、エラーの原因となりやすいです。

また、条件式の評価において、誤った比較演算子の使用やデータタイプの不一致による問題を避けるために、常に正しい演算子とデータタイプを使用することが肝心です。

○よくある間違いとその対策

一般的な間違いの一つに、条件式での誤ったデータ型の使用があります。

例えば、数値型と文字列型の間での比較を行う場合、データ型の不一致により予期せぬ結果が生じる可能性があります。

このような問題を避けるために、比較前にデータ型を適切に変換することが重要です。

また、条件分岐において、すべての可能なケースをカバーしていないこともよくある間違いです。

全ての可能性を検討し、ELSE文を適切に使用することで、未定義の挙動を防ぐことができます。

○効率的なコードの書き方

効率的なコードを書くためには、まず、条件式をシンプルに保つことが重要です。

複雑な条件は、可読性を低下させ、デバッグを困難にします。

また、繰り返し使用される条件文は、サブルーチンや関数に分割することで、コードの再利用性を高めることができます。

さらに、条件文の中で、可能な限り早期に結果を返すことで、プログラムのパフォーマンスを向上させることができます。

不要な処理を避け、プログラムの効率を高めることにより、COBOLプログラミングの品質を向上させることができます。

まとめ

この記事では、COBOL言語におけるIF THEN ELSE関数の基本的な使い方から応用例まで、10の異なるシナリオを通して詳細に解説しました。

IF THEN ELSE関数はCOBOLプログラミングの中核となる要素であり、条件分岐を扱う上で不可欠です。

この記事が、COBOLプログラミングを学ぶ初心者から経験豊富なプログラマーまで、すべての読者にとって役立つ情報源となることを願っています。

IF THEN ELSE関数の適切な理解と活用により、より効果的かつ効率的なプログラミングが可能となるでしょう。