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文で構成された入れ子になっていることにご着目ください。
- ******************************************************************
- * Author:
- * Date:
- * Purpose:
- * Tectonics: cobc
- ******************************************************************
- IDENTIFICATION DIVISION.
- PROGRAM-ID.IREKO-SAMPLE1.
- DATA DIVISION.
- FILE SECTION.
- WORKING-STORAGE SECTION.
- 01 WORKING-AREA.
- * コンソール入力バッファ
- 03 CONSOLE-INPUT PIC X(1).
- *-------------------------------------------
- * 主手続
- *-------------------------------------------
- PROCEDURE DIVISION.
- MAIN-PROCEDURE.
- * コンソール入力エリアの初期化
- MOVE SPACE TO CONSOLE-INPUT.
- EXEC-DISPLAY-INPUT-PROC.
- * コンソール表示&入力
- DISPLAY "1桁の商品コードを入力してください".
- ACCEPT CONSOLE-INPUT FROM CONSOLE.
- * 範囲チェックと商品名の表示
- IF (CONSOLE-INPUT >= 1) AND
- (CONSOLE-INPUT <= 5) THEN
- * 商品名の表示
- EVALUATE CONSOLE-INPUT
- WHEN 1
- DISPLAY "みかん"
- WHEN 2
- DISPLAY "りんご"
- WHEN 3
- DISPLAY "ばなな"
- WHEN 4
- DISPLAY "すいか"
- WHEN 5
- DISPLAY "めろん"
- END-EVALUATE
- * 範囲外の場合、エラー処理を行い再入力する
- ELSE
- DISPLAY "該当する商品がありません"
- GO TO EXEC-DISPLAY-INPUT-PROC
- END-IF.
- STOP RUN.
- END PROGRAM IREKO-SAMPLE1.
■実行結果
はじめに商品コードの入力を促すメッセージが表示されます。
数字の0を入力してみます。
エラーメッセージが表示され、入力を促すメッセージが表示されます。
次に数字の1を入力してみます。
商品名が表示され、プログラムが終了しました。
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文が入れ子になっていましたが、同じ入れ子構造でもサブルーチン化することにより、プログラムがスッキリすることがご理解いただけることでしょう。
- ******************************************************************
- * Author:
- * Date:
- * Purpose:
- * Tectonics: cobc
- ******************************************************************
- IDENTIFICATION DIVISION.
- PROGRAM-ID. IREKO-SAMPLE2.
- DATA DIVISION.
- FILE SECTION.
- WORKING-STORAGE SECTION.
- 01 WORKING-AREA.
- * コンソール入力バッファ
- 03 CONSOLE-INPUT PIC X(1).
- *-------------------------------------------
- * 主手続
- *-------------------------------------------
- PROCEDURE DIVISION.
- MAIN-PROCEDURE.
- * コンソール入力エリアの初期化
- MOVE SPACE TO CONSOLE-INPUT.
- EXEC-INPUT-PROC.
- * コンソール表示&入力
- DISPLAY "1桁の商品コードを入力してください".
- ACCEPT CONSOLE-INPUT FROM CONSOLE.
- * 範囲チェックと商品名の表示
- IF (CONSOLE-INPUT >= 1) AND
- (CONSOLE-INPUT <= 5) THEN
- * 商品名の表示
- PERFORM EXEC-DISPLAY-PROC
- * 範囲外の場合、エラー処理を行い再入力する
- ELSE
- DISPLAY "該当する商品がありません"
- GO TO EXEC-INPUT-PROC
- END-IF.
- STOP RUN.
- *-------------------------------------------
- * 商品名の表示処理
- *-------------------------------------------
- EXEC-DISPLAY-PROC.
- * 商品名の表示
- EVALUATE CONSOLE-INPUT
- WHEN 1
- DISPLAY "みかん"
- WHEN 2
- DISPLAY "りんご"
- WHEN 3
- DISPLAY "ばなな"
- WHEN 4
- DISPLAY "すいか"
- WHEN 5
- DISPLAY "めろん"
- END-EVALUATE.
- EXIT.
- END PROGRAM IREKO-SAMPLE2.
■実行結果
はじめに商品コードの入力を促すメッセージが表示されます。
数字の0を入力してみます。
エラーメッセージが表示され、入力を促すメッセージが表示されます。
次に数字の1を入力してみます。
商品名が表示され、プログラムが終了しました。
COBOL言語の入れ子と構造の確認問題
問)
COBOL言語のプログラムにおいて、IF文の入れ子構造を構成する場合、入れ子の階層は何階層程度にとどめるべきか。
答え)
3階層程度。
構造化プログラミングにおいて、ロジックやサブルーチンの入れ子は、わかりやすくシンプルなプロプラム作成の重要なポイントです。機能ごとにまとめたブロック構造の積み重ねと、深くなり過ぎない入れ子構造の階層化を意識し、処理の開始と終了を明確にしたプログラミングを心がけてください。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典