COBOLをJavaに変換する
COBOLからJavaへのプログラム変換を具体例を挙げながら
変換して行こうと思います。
今回は秀和システムの「開発で役立つCOBOLプログラミング入門」の確認問題のプログラムをカスタマイズしたものを、Javaに変換するとどうなるか見ていこうと思います。
まずはCOBOLプログラムの方、実際に本に掲載されているプログラムを一部カスタマイズして変更しています。
IDENTIFICATION DIVISION.
PROGRAM-ID. Main03.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 カウンタ PIC 9(2).
01 年齢 PIC 9(2).
PROCEDURE DIVISION.
対象抽出 SECTION.
*
PERFORM 初期化処理.
*
PERFORM 主処理.
*
STOP RUN.
*
*************************************************
初期化処理 SECTION.
*************************************************
*
INITIALIZE カウンタ.
*
初期化処理-EX.
EXIT.
*
*************************************************
主処理 SECTION.
*************************************************
*
PERFORM 10 TIMES
DISPLAY "年齢:" WITH NO ADVANCING
ACCEPT 年齢
*
IF 年齢 < 10 OR >= 30 AND <= 39 OR = 44 OR
= 55 OR >= 75
THEN
ADD 1 TO カウンタ
ELSE
CONTINUE
END-IF
END-PERFORM.
DISPLAY "カウンタ:" カウンタ.
*
主処理-EX.
EXIT.
*
どのようにJavaに変換するか
DATA DIVISION.
WORKING-STORAGE SECTION.
01 カウンタ PIC 9(2).
01 年齢 PIC 9(2).
PERFORM 10 TIMES
DISPLAY "年齢:" WITH NO ADVANCING
ACCEPT 年齢
まず作業場所節とPERFORMを10回行うところをmainメソッドで
for文を使い、10回までループ処理させるようにしましょう。
回数が決まっているループ処理にはfor文使うのが有効です。
ここでループ処理に使うのは変数をiを定義します。
public class Main03 {
public static void main(String[] args) {
int i, j = 0;
for (i = 1; i <= 10; i++) {
System.out.print("年齢:");
int age = new java.util.Scanner(System.in).nextInt();
次にDISPLAY "年齢:" WITH NO ADVANCINGのJavaでの実装
System.out.print("年齢:");を使うと後続のScannerクラスと合わせて表示されます。
次にIF文の実装
IF 年齢 < 10 OR >= 30 AND <= 39 OR = 44 OR
= 55 OR >= 75
THEN
ADD 1 TO カウンタ
ELSE
CONTINUE
END-IF
if(age < 10 || age >= 30 && age <= 39 ||
age == 44 || age == 55 || age >= 75 ) {
j++; } else { continue;
}
今回COBOLでのカウンタがJavaでは変数jにあたります。
論理演算子は次の様になります。
条件 | COBOL | Java |
---|---|---|
AまたはB | A OR B | A || B |
AかつB | A AND B | A && B |
ADD 1 TO カウンタの部分はj++になります。
補足ですが仮にADD 2 TO カウンタならj += 2とかになります。
Java全体としてのプログラムとしては以下になります。
public class Main03 {
public static void main(String[] args) {
int i, j = 0;
for (i = 1; i <= 10; i++) {
System.out.print("年齢:");
int age = new java.util.Scanner(System.in).nextInt();
if(age < 10 || age >= 30 && age <= 39 ||
age == 44 || age == 55 || age >= 75 ) {
j++; } else { continue;
}
}
System.out.println("カウンタ" + j);
}
}
for文のブロックが終わる直後にカウンタを表示させます。
COBOLでも以下の様にEND-PERFORMの直後にDISPLAY文をいれてカウンタを表示させています。
PERFORM 10 TIMES
DISPLAY "年齢:" WITH NO ADVANCING
ACCEPT 年齢
*
IF 年齢 < 10 OR >= 30 AND <= 39 OR = 44 OR
= 55 OR >= 75
THEN
ADD 1 TO カウンタ
ELSE
CONTINUE
END-IF
END-PERFORM.
DISPLAY "カウンタ:" カウンタ.
実行結果
2つ同じように年齢をキーボードから受け入れていって同じ結果に
なっているのがお分かりいただけたと思います。
$ ./Main03
年齢:9
年齢:10
年齢:29
年齢:30
年齢:39
年齢:40
年齢:44
年齢:55
年齢:74
年齢:75
カウンタ:06
$ java Main03
年齢:9
年齢:10
年齢:29
年齢:30
年齢:39
年齢:40
年齢:44
年齢:55
年齢:74
年齢:75
カウンタ6
最後に
今回COBOLからJavaに変換しましたが、実行結果も同じ結果になり、
それほど難しくなく、マイグレーション出来たのがお分かりいただけたと思います。
今後も何かCOBOLからJavaに変換するプログラムの企画を考えています。
最後までご覧いただきありがとうございました!
参考文献
秀和システム 開発で役立つCOBOLプログラミング入門