COBOLにおける条件分岐について・IF文による複数の分岐の方法

COBOLにおける条件分岐について
この記事では、COBOLにおける条件分岐、特に条件によって複数に分岐するプログラムについて、説明していきます。
COBOLというプログラミング言語自体は、作られてから既に半世紀以上が経過していますが、金融業界などでは、現在でも使われている言語です。そんなCOBOLにおける、条件分岐について知りたい方は是非ご覧ください。
条件分岐の方法
では、基本的な条件分岐の方法としてまずは、IF-THEN型のコードを見てみます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
IDENTIFICATION DIVISION.
PROGRAM-ID. simple_if_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num PIC 99 VALUE 13.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
IF num = 13 THEN
DISPLAY “num is 13”
END-IF.
STOP RUN.
END PROGRAM simple_if_program.
|
このプログラムでは、変数numが13ならば、「num is 13」と出力し、そうでなければ何もしないというプログラムです。では、変数numが13ではない場合、「num is not 13」と出力するように改造してみましょう。
1
2
3
4
5
6
7
8
9
|
*MAIN-PROCEDUREの部分のみ表示
IF num = 13 THEN
DISPLAY “num is 13”
ELSE
DISPLAY “num is not 13”
END-IF.
STOP RUN.
|
このように、
1
2
3
4
5
6
7
|
IF (条件) THEN
条件が真のとき実行する処理
ELSE
条件が偽のとき実行する処理
END-IF
|
とすることで、条件分岐を行うことが出来ます。
IF文による複数の分岐の方法
COBOLにおけるシンプルな条件分岐についてサンプルコードを見てきたところで、ここからは複数に分岐する場合の書き方を見ていきます。
例として、前出のサンプルプログラムを改造し、変数numの値が10だったら「num is 10」と、変数numの値が13だったら「num is 13」と、それ以外ならば「num is other」と表示させるようなプログラムを考えてみましょう。
COBOL以外では…
ifとelseの間に、elseifという構文が用意されているプログラミング言語もあります。その代表格がPHPです。PHPは1995年に公開されてから、現在でもWEBアプリケーションなどの分野で利用されているプログラミング言語です。
さて、PHPで複数の分岐を書こうとすると、以下のようなコードになります。
1
2
3
4
5
6
7
8
9
10
|
$num=13;
if ($num==10) {
echo “num is 10”;
}elseif ($num==13) {
echo “num is 13”;
}else {
echo “num is other”;
}
|
ここで注目したいのは、ifとelseの間にelseif (条件式) という構文があることです。この構文によって、変数numが10の場合、13の場合、それ以外の場合に分岐させることができるのです。
COBOLで複数の分岐を行う
PHPでは、elseifという構文が用意されていました。しかし、COBOLでは、このような構文は用意されていません。 よって、COBOLでは、ELSEの中に入れ子(ネスト)にして新たな、IF文を書かなければなりません。
では、実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
IDENTIFICATION DIVISION.
PROGRAM-ID. if_else_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num PIC 99 VALUE 13.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
IF num = 10 THEN
DISPLAY “num is 10”
ELSE
IF num = 13 THEN
DISPLAY “num is 13”
ELSE
DISPLAY “num is other”
END-IF
END-IF.
STOP RUN.
END PROGRAM if_else_program.
|
注目すべきは、「IF num = 13 THEN」が書かれている位置です。このIF文全体が「IF num = 10 THEN」のELSEの中に書かれていることが分かると思います。
このように、変数numが10の場合、13の場合、それ以外の場合に分岐させるには、ELSEの中にさらにIF文を書いてあげると想定通り、正しく動きます。
ELSE IFを用いる方法
このように、COBOLでは、入れ子構造にしなければならないのですが、一方で、IF文の中にIF文があって、さらにその中にIF文があって…となった場合、非常に分かりにくくなってしまいます。上述のPHPのようにelseifで区分けされていると、プログラム全体の見通しが良くなり、分かりやすいソースコードとなります。
そこで、COBOLのソースコードを少し工夫して、見やすくする書き方もあります。それが、このようなコードです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
IDENTIFICATION DIVISION.
PROGRAM-ID. elseif_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num PIC 99 VALUE 13.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
IF num = 10 THEN
DISPLAY “num is 10”
ELSE IF num = 13 THEN
DISPLAY “num is 13”
ELSE
DISPLAY “num is other”
END-IF
END-IF.
STOP RUN.
END PROGRAM elseif_program.
|
このように、インデントの位置と改行を少し変更すれば、まるで、ELSE IF構文があるかのような見た目となり、プログラムの可読性が上がります。IF文で複数の分岐を行わなければならない際は、このような分かりやすくするための工夫も行う必要があるでしょう。
プログラムの例
それでは、ここまでで紹介したことを踏まえ、おみくじをひけるサンプルプログラムを、COBOLで作成してみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
IDENTIFICATION DIVISION.
PROGRAM-ID. omikuji_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 STIME PIC 9(8).
01 num PIC 99.
01 div2 PIC 9(6).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
ACCEPT STIME FROM TIME.
DIVIDE 100 INTO STIME GIVING div2 REMAINDER num.
DISPLAY “======おみくじ======“
IF num < 10 THEN
DISPLAY “大吉”
ELSE IF num < 30 THEN
DISPLAY “中吉”
ELSE IF num < 95 THEN
DISPLAY “吉”
ELSE
DISPLAY “凶”
END-IF
END-IF
END-IF.
DISPLAY “(num is “ num “)”.
STOP RUN.
END PROGRAM omikuji_program.
|
ここで、「DISPLAY “======おみくじ======“」より上の2行は、現在の時刻を取得し、ミリ秒のみを取り出して、変数numに格納するプログラムです。
ミリ秒は0~99までの値を取りうるため、IF文を使って条件分岐しています。ソースコードを見ると分かるように、変数numが10未満ならば「大吉」、30未満ならば「中吉」、95未満ならば「吉」、いずれにも該当しなければ「凶」と表示されます。
COBOLの条件分岐を使いこなそう
いかがでしたでしょうか。COBOLでは、他のプログラミング言語で見られるelseifなどの構文はありません。そのため複数に分岐する場合は、入れ子(ネスト)を利用した分岐処理を書かなければなりませんでした。
ぜひここで紹介したソースコードやご自身で作ったプログラムを実際に動かしてみて、COBOLにおける条件分岐を使いこなしてみてください。
FEnetを運営しているネプラス株式会社はサービス開始から10年以上
『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
ネプラス株式会社はこんな会社です
秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
インフラ業界に特化
ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。
業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。
-
正社員なのにフリーランスのような働き方
正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。
プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。
-
大手直取引の高額案件
案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。
Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。
-
スキルアップ支援
不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。
受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など
※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。
-
現給与を保証します!※
前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。
※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。
-
インセンティブ制度
ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。
取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。
-
社会保険・福利厚生
社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。
さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。
-
東証プライム上場企業グループ
ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
ネプラス株式会社に興味を持った方へ
ネプラス株式会社では、インフラエンジニアを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
オンライン面接も随時受付中。ぜひお気軽にご応募ください。


COBOL新着案件New Job
-
活動基盤システムの運用保守/東京都中央区/【WEB面談可】/在宅勤務/20代~30代の方活躍中
年収396万~576万円東京都中央区(水天宮前駅) -
メインフレームシステム設計構築のテスター/COBOL/神奈川県横浜市/【WEB面談可】/リモート対応可/20代~40代の方活躍中
年収300万~420万円神奈川県横浜市(市ヶ尾駅) -
メインフレームシステム運用/COBOL/神奈川県横浜市/【WEB面談可】/リモート対応可/20代~40代の方活躍中
年収600万~720万円神奈川県横浜市(市ヶ尾駅) -
メインフレームシステム設計構築/COBOL/神奈川県横浜市/【WEB面談可】/リモート対応可/20代~40代の方活躍中
年収720万~840万円神奈川県横浜市(市ヶ尾駅) -
共通基盤更改に伴うサーバ運用保守/Apache/東京都品川区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/リモート対応可
年収420万~600万円東京都品川区(品川駅) -
共通基盤更改に伴うサーバ設計構築のテスター/Apache/東京都品川区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/リモートワーク
年収300万~420万円東京都品川区(品川駅)