COBOL言語の「PERFORM文」とは。実行制御について解説! | 用語辞典

COBOL(コボル)言語の予約語PERFORMを使ったサブルーチンの実行とは

辞典・辞書-PERFORM-イメージ

COBOL(コボル)言語のPERFORM文とは?

PERFORM(英語)は、日本語に訳すると、「実行する」という意味です。

COBOL(コボル)言語のPERFORM文は、サブルーチンを実行したり、サブルーチンを繰り返し実行したりします。サブルーチンとは、手続き部に記述されたサブルーチン名からEXITまでの1連の処理群です。

PREFORM文の形式1 ~サブルーチンを実行する~

サブルーチンを1度だけ実行する場合は、PERFORMのあとにサブルーチン名を記述します。

構文

 PREFORM サブルーチン名.

使用例

 PREFORM SUB-PROC-1.

PREFORM文の形式2 ~サブルーチンを一定回数実行する~

サブルーチンを一定回数実行する場合は、PREFORM サブルーチン名のあとに実行回数を指定します。

構文

 PREFORM サブルーチン名. 実行回数 TIMES.

構文規則

 <サブルーチン名>

  実行するサブルーチン名を記述します。

 <実行回数>

  サブルーチンを実行する回数を整数の数値定数や、整数の数値形式のデータ項目で指定します。

使用例

 PREFORM SUB-PROC-1 PROCNUM TIMES.

PREFORM文の形式3 ~サブルーチンを指定した条件になるまで実行する~

指定した条件を満たす間、サブルーチンを実行するには、UNTIL句を使います。

構文

 PREFORM サブルーチン名 [WITH TEST 確認タイミング]UNTIL 論理式.

構文規則

 <サブルーチン名>

  実行するサブルーチン名を記述します。

 <確認タイミング>

  実行するかどうかの確認をサブルーチンの実行前(BEFORE)、実行後(AFTER)で記述します。

  指定しなかった場合のデフォルト値(規定値)は、BEFOREです。

 <論理式>

  サブルーチンを終了する条件を論理式で記述します。

  論理式は、IF~THENで指定する論理式と同じ構文です。

使用例

 PREFORM SUB-PROC-1 UNTIL LOOP-CNT > LOOP-MAX.

 PREFORM SUB-PROC-1 WITH TEST AFTER UNTIL LOOP-CNT > LOOP-MAX.

COBOL(コボル)言語のPERFORM文を使ったプログラム例

では、実際にPREFORM文を使用したプログラム例をご紹介します。

辞典・辞書-PERFORM-プログラム例

このプログラムは、コンソールに入力を促すメッセージを表示し、数字の0から9までの1文字を入力させる処理を繰り返すプログラムです。数字の9が入力されるとプログラムを終了します。

着目してほしいのは、24行目から31行目までの繰り返しを制御している部分で、メイン処理部のIF文で制御し、GO TO文でループさせている点です。

では、プログラムを実行してみましょう。

はじめに入力を促すメッセージが表示されます。

辞典・辞書-PERFORM-入力例1

数字の0を入力してみます。

辞典・辞書-PERFORM-入力例2

入力を促すメッセージが繰り返し表示されます。

次に数字の8を入力してみます。

辞典・辞書-PERFORM-入力例3

入力を促すメッセージが繰り返し表示されます。

次に数字の9を入力してみます。

辞典・辞書-PERFORM-入力例4

プログラムが終了しました。

COBOL(コボル)言語のPERFORM文を使うときの注意点

単純にサブルーチンを実行させる場合は特に注意する必要はありませんが、UNTIL句を使う場合は、以下の注意が必要です。

間違って永久ループになりやすい

UNTIL句を使うとサブルーチンは条件になるまで実行され続けるため、バグ(プログラムの不具合)によって、永久ループになってしまうことがあります。UNTIL句には、デバッグしやすいシンプルな条件式を設定しましょう。

初期化漏れで思わぬ動作をする

UNTIL句の条件式に使う変数を初期化せずに使うと、初回の処理をする前の判定が思わぬ動作をしてしまいます。UNTIL句の条件式に使う変数は必ず初期化して使いましょう。

PERFORM文を使ったCOBOL(コボル)プログラムの活用方法

「COBOL(コボル)言語のPERFORM文を使ったプログラム例」と同じ機能を、PERFORM文のUNTIL句を使うことで、実行制御を簡略化することができます。

では、UNTIL句を使ったサンプルプログラムをご紹介します。

  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. PERFORM-SUMPLE2.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. WORKING-STORAGE SECTION.
  12. 01 WORKING-AREA.
  13. *  コンソール入力バッファ
  14. 03 CONSOLE-INPUT PIC X(1).
  15.  
  16. PROCEDURE DIVISION.
  17. *-------------------------------------------
  18. * 主手続
  19. *-------------------------------------------
  20. MAIN-PROCEDURE.
  21. *  コンソール入力エリアの初期化
  22. MOVE SPACE TO CONSOLE-INPUT.
  23.  
  24. *  コンソール表示&入力
  25. PERFORM DISPLAY-INPUT-PROC UNTIL CONSOLE-INPUT = 9.
  26.  
  27. STOP RUN.
  28.  
  29. *-------------------------------------------
  30. * コンソール表示&入力処理
  31. *-------------------------------------------
  32. DISPLAY-INPUT-PROC.
  33. DISPLAY "数字を1文字入力してください".
  34. DISPLAY "0-8:CONTINUE  9:EXIT".
  35. ACCEPT CONSOLE-INPUT FROM CONSOLE.
  36. EXIT.
  37.  
  38. END PROGRAM PERFORM-SUMPLE2.

着目してほしいのは赤字で記述したPERFORM文です。「COBOL(コボル)言語のPERFORM文を使ったプログラム例」では、5ステップかかった処理が、PERFORM文でUNTIL句を使うと、シンプルな1ステップになっています。GO TO文を使わないので、ラベルも必要ありません。

では、プログラムを実行してみましょう。

はじめに入力を促すメッセージが表示されます。

辞典・辞書-PERFORM-入力例1

数字の0を入力してみます。

辞典・辞書-PERFORM-入力例2

入力を促すメッセージが繰り返し表示されます。

次に数字の8を入力してみます。

辞典・辞書-PERFORM-入力例3

入力を促すメッセージが繰り返し表示されます。

次に数字の9を入力してみます。

辞典・辞書-PERFORM-入力例4

プログラムが終了しました。

PERFORM文にUNTIL句を使うと、「COBOL(コボル)言語のPERFORM文を使ったプログラム例」と全く同じ機能を、シンプルに実現できることがわかっていただけると思います。

シンプルなプログラムは、バグを生みません。プログラミングは「シンプル イズ ベスト」であることを心にとどめておいてください。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門