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」という文があるわけではありません。