IF~THEN文による多岐選択

COBOLのIF~THEN文は1つの条件で2つの処理分岐を実現するものです。
しかし、下記のように3つ以上の条件で3つ以上の処理分岐を実現したい場合も少なくありません。


「1が入力されたら(条件1)    処理1
 2が入力されたら(条件2)    処理2
 3から5が入力されたら(条件3) 処理3
 それ以外なら(条件4)      処理4」


このような処理に対して、例えばC言語のIF文であれば多岐条件文(ELSE IF文)が用意されていますが、COBOLではそれがありません。
そのため3つ以上の処理分岐を実現させたい場合は、IF~THEN文を入れ子にしてやる必要があります。

000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-07.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 NUM                           PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     ACCEPT    NUM                FROM  CONSOLE.
000130     IF  NUM  = 1 THEN
000140         DISPLAY  "1が入力された" UPON  CONSOLE
000150     ELSE
000160         IF  NUM = 2 THEN
000170             DISPLAY  "2が入力された" UPON  CONSOLE
000180         ELSE            
000190             IF  NUM >= 3 AND NUM <= 5 THEN
000200                 DISPLAY  "3から5の間が入力された" UPON  CONSOLE
000210*
000220             ELSE
000230                 DISPLAY  "それ以外"               UPON  CONSOLE
000240*                 
000250             END-IF
000260*        
000270         END-IF
000280*
000290     END-IF.
000300     STOP RUN.

上記のように記述すれば、一応要件を満たすことができますが、ご覧のとおり入れ子が深くなりソースコードが非常に読みづらくなります。
条件が増えれば、なおさらです。

そのため、読みやすいよう下記のような工夫を行ってコーディングする人もいます。

000130     IF  NUM  = 1 THEN
000140         DISPLAY  "1が入力された" UPON  CONSOLE
000150*
000160     ELSE IF  NUM = 2 THEN
000170         DISPLAY  "2が入力された" UPON  CONSOLE
000180*        
000190     ELSE IF  NUM >= 3 AND NUM <= 5 THEN
000200         DISPLAY  "3から5の間が入力された" UPON  CONSOLE
000210*        
000220     ELSE
000230         DISPLAY  "それ以外"      UPON  CONSOLE
000240*
000250     END-IF
000260     END-IF
000270     END-IF.

上記サンプルは、ELSE以降に新たなIF~THEN文を記述する方法です。
「ELSE IF」という文があるわけではありません。

«  IF~THEN文による多岐選択  »