COBOL言語の入れ子と構造を理解して使いこなそう!|基礎ガイド

COBOL(コボル)言語の入れ子の構造とロジック制御とは

基礎-入れ子-イメージ

入れ子とは?

入れ子とはネスティングとも呼ばれ、構造化プログラミングのプログラム構築手法のひとつです。

処理ブロックの中に別の処理ブロックを埋め込んだり、データブロックの中に別のデータブロックを埋め込んだりすることにより、機能ごとに分割した簡潔なブロック群でプログラムを構成して行きます。

COBOL言語では、IF文などを使用して処理ブロックを分けたり、処理ブロックをサブルーチン化し、PERFORM文でサブルーチンを呼び出したりすることにより、入れ子構造を構築します。

COBOL言語のIF文を使った入れ子構造

COBOL言語では、IF文を使用することにより、処理を入れ子にすることができます。例えば、条件Aに該当する場合は処理Aを実行し、さらに条件A-1に該当する場合には処理A-1も実行します。そして、条件Aに該当しない場合は、処理Bを実行するような場合です。このとき、処理Aと処理A-1が入れ子になっています。

IF文を用いた入れ子構造は、階層が深くなるとプログラムが複雑になり、理解し難くなってしまいます。IF文による入れ子の階層は、3階層程度までを目安としましょう。

■入れ子構造の例

 IF 条件A THEN

    処理A

    IF 条件A-1 THEN

       処理A-1

    END-IF

 ELSE

    処理B

 END-IF.


■プログラム例

ご紹介するサンプルプログラムは、コンソールに商品コードの入力を促すメッセージを表示し、商品コードに該当する商品名を表示するプログラムです。商品コードは1から5までで、それぞれの商品名は、「みかん」、「りんご」、「ばなな」、「すいか」、「めろん」としています。また、入力された商品コードに該当する商品がない場合はとエラーメッセージを表示し、商品コードの再入力を促します。

入力された商品コードの範囲チェックと商品名の表示処理が、IF文とEVALUATE文で構成された入れ子になっていることにご着目ください。

  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID.IREKO-SAMPLE1.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. WORKING-STORAGE SECTION.
  12. 01 WORKING-AREA.
  13. * コンソール入力バッファ
  14. 03 CONSOLE-INPUT PIC X(1).
  15. *-------------------------------------------
  16. * 主手続
  17. *-------------------------------------------
  18. PROCEDURE DIVISION.
  19. MAIN-PROCEDURE.
  20. * コンソール入力エリアの初期化
  21. MOVE SPACE TO CONSOLE-INPUT.
  22. EXEC-DISPLAY-INPUT-PROC.
  23. * コンソール表示&入力
  24. DISPLAY "1桁の商品コードを入力してください".
  25. ACCEPT CONSOLE-INPUT FROM CONSOLE.
  26. * 範囲チェックと商品名の表示
  27. IF (CONSOLE-INPUT >= 1) AND
  28. (CONSOLE-INPUT <= 5) THEN
  29. * 商品名の表示
  30. EVALUATE CONSOLE-INPUT
  31. WHEN 1
  32. DISPLAY "みかん"
  33. WHEN 2
  34. DISPLAY "りんご"
  35. WHEN 3
  36. DISPLAY "ばなな"
  37. WHEN 4
  38. DISPLAY "すいか"
  39. WHEN 5
  40. DISPLAY "めろん"
  41. END-EVALUATE
  42. * 範囲外の場合、エラー処理を行い再入力する
  43. ELSE
  44. DISPLAY "該当する商品がありません"
  45. GO TO EXEC-DISPLAY-INPUT-PROC
  46. END-IF.
  47. STOP RUN.
  48. END PROGRAM IREKO-SAMPLE1.

■実行結果

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

基礎-入れ子-実行結果

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

基礎-入れ子-入力例1

エラーメッセージが表示され、入力を促すメッセージが表示されます。

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

基礎-入れ子-入力例2

商品名が表示され、プログラムが終了しました。

COBOL言語のPERFORM文を使った入れ子構造

COBOL言語では、処理ブロックをサブルーチン化し、PERFORM文を使用して呼び出すことにより、入れ子構造を作ることができます。例えば、条件Aに該当する場合はサブルーチンAを実行し、さらに条件A-1に該当する場合にはサブルーチンA-1も実行します。そして、条件Aに該当しない場合は、サブルーチンBを実行するような場合です。このとき、サブルーチンAとサブルーチンA-1が入れ子になっています。

■入れ子構造の例

 <メイン処理>
 IF 条件A THEN
    PERFORM サブルーチンA
    END-IF
 ELSE
    PERFORM サブルーチンB
 END-IF.


■プログラム例

ご紹介するサンプルプログラムは、「COBOL言語のIF文を使った入れ子構造」でご紹介したサンプルプログラムと同じ機能を、サブブルーチンにして分割し、入れ子構造にしたプログラムです。

「COBOL言語のIF文を使った入れ子構造」でご紹介したサンプルプログラムでは、IF文の中にEVALUATE文が入れ子になっていましたが、同じ入れ子構造でもサブルーチン化することにより、プログラムがスッキリすることがご理解いただけることでしょう。

  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. IREKO-SAMPLE2.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. WORKING-STORAGE SECTION.
  12. 01 WORKING-AREA.
  13. * コンソール入力バッファ
  14. 03 CONSOLE-INPUT PIC X(1).
  15. *-------------------------------------------
  16. * 主手続
  17. *-------------------------------------------
  18. PROCEDURE DIVISION.
  19. MAIN-PROCEDURE.
  20. * コンソール入力エリアの初期化
  21. MOVE SPACE TO CONSOLE-INPUT.
  22. EXEC-INPUT-PROC.
  23. * コンソール表示&入力
  24. DISPLAY "1桁の商品コードを入力してください".
  25. ACCEPT CONSOLE-INPUT FROM CONSOLE.
  26. * 範囲チェックと商品名の表示
  27. IF (CONSOLE-INPUT >= 1) AND
  28. (CONSOLE-INPUT <= 5) THEN
  29. * 商品名の表示
  30. PERFORM EXEC-DISPLAY-PROC
  31. * 範囲外の場合、エラー処理を行い再入力する
  32. ELSE
  33. DISPLAY "該当する商品がありません"
  34. GO TO EXEC-INPUT-PROC
  35. END-IF.
  36. STOP RUN.
  37. *-------------------------------------------
  38. * 商品名の表示処理
  39. *-------------------------------------------
  40. EXEC-DISPLAY-PROC.
  41. * 商品名の表示
  42. EVALUATE CONSOLE-INPUT
  43. WHEN 1
  44. DISPLAY "みかん"
  45. WHEN 2
  46. DISPLAY "りんご"
  47. WHEN 3
  48. DISPLAY "ばなな"
  49. WHEN 4
  50. DISPLAY "すいか"
  51. WHEN 5
  52. DISPLAY "めろん"
  53. END-EVALUATE.
  54. EXIT.
  55. END PROGRAM IREKO-SAMPLE2.

■実行結果

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

基礎-入れ子-実行結果

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

基礎-入れ子-入力例1

エラーメッセージが表示され、入力を促すメッセージが表示されます。

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

基礎-入れ子-入力例2

商品名が表示され、プログラムが終了しました。

COBOL言語の入れ子と構造の確認問題

問)
COBOL言語のプログラムにおいて、IF文の入れ子構造を構成する場合、入れ子の階層は何階層程度にとどめるべきか。

答え)
3階層程度。

構造化プログラミングにおいて、ロジックやサブルーチンの入れ子は、わかりやすくシンプルなプロプラム作成の重要なポイントです。機能ごとにまとめたブロック構造の積み重ねと、深くなり過ぎない入れ子構造の階層化を意識し、処理の開始と終了を明確にしたプログラミングを心がけてください。

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

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

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

COBOL入門のカテゴリー

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