検証環境
COBOL | Java |
---|---|
cobc (GnuCOBOL) 3.1.2.0 | java 14.0.1 2020-04-14 |
はじめに
前回の記事では、「全体構造から見たCOBOLとJavaの違い」を見ていきました。今回はCOBOLとJavaで、「基本文法がどのように変わってくるのか」を書いていこうと思います。最終回です。
閲覧してほしい方(前編より)
- これからCOBOLからオープン系へのマイグレーションに従事する方
- COBOLとJavaの言語的違いを知っておきたい方
- COBOL習熟者で、将来オープン言語を触らなければならないがわからない方
COBOL未経験でマイグレーションされる方や、これからCOBOLエンジニアからJavaエンジニアに移る方の駆け出し資料として参考になれば幸いです。
1.データID ⇔ 変数
Java等オープン言語でいう変数、COBOLでいうデータIDの定義方法は、根本的な考えから違います。
まずそもそも、COBOLでは、好きな箇所でデータIDの定義はできません。使いたいデータIDは、DATA DIVISION
のWORKING-STORAGE SECTION
で定義しなければなりません。
*--1---------2---------3---------4---------5---------6
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VARIABLE PIC X(5).
この場合、01 VARIABLE PIC X(5).
がデータ名定義で、「レベル01でVARIABLE
というデータ名をXタイプ5桁で定義」を意味します。データ名に関して詳しいことについては、こちらをご覧ください。
しかしJavaの場合、変数は使用したいとき、使用したい場所で定義することができます。記法は以下のとおりです。
public static void main(String[] args) {
// mainメソッドで使用可能なint型variableを定義
int variable;
}
2.IF
⇔ if
if
においては、COBOLとJavaで記法が似ている上、考え方はどちらも同じです。
*--1---------2---------3---------4---------5---------6
IF CONDITION
THEN
DISPLAY 'CONDITION IS TRUE.'
ELSE
DISPLAY 'CONDITION IS FALSE.'
END-IF.
if (condition) {
System.out.println("Condition is true.");
} else {
System.out.println("Condition is false.");
}
どちらもcondition
がtrue
のときに、上側のロジックが走ります。
COBOLのほうが、どちらかといえばVB寄りの記法です。
ただし、「かつ」や「または」といった論理演算子については、COBOLとJavaでは違いがあります。
言語 | COBOL | Java |
---|---|---|
かつ | AND |
&& |
または | OR |
|| |
3.EVALUATE
⇔ switch
基本的な使用方法は、COBOLとJavaではあまり変わりません。
*--1---------2---------3---------4---------5---------6
EVALUATE EXPRESSION
WHEN 1
DISPLAY 'EXPRESSION IS 1'
WHEN 2
DISPLAY 'EXPRESSION IS 2'
WHEN OTHER
DISPLAY 'EXPRESSION IS NOT 1 AND 2'
END-EVALUATE.
switch(expression) {
case 1:
System.out.println("expression is 1");
break;
case 2:
System.out.println("expression is 2");
break;
default:
System.out.println("exrepssion is not 1 and 2");
break;
}
ただし、COBOLでは使用てきていた以下の記法は使用できません。
-
EXPRESSION
をTRUE
として、WHEN
に式を書く方法
*--1---------2---------3---------4---------5---------6
EVALUATE TRUE
WHEN EXPRESSION = 1
DISPLAY 'EXPRESSION IS 1'
WHEN EXPRESSION = 2
DISPLAY 'EXPRESSION IS 2'
WHEN OTHER
DISPLAY 'EXPRESSION IS NOT 1 AND 2'
END-EVALUATE.
- 2つ以上の項目の同時比較
-
ANY
を使用した判定
*--1---------2---------3---------4---------5---------6
EVALUATE EXPRESSION1 EXPRESSION2
WHEN 1 1
DISPLAY 'EXPRESSION1 IS 1'
DISPLAY 'EXPRESSION2 IS 1'
WHEN 2 ANY
DISPLAY 'EXPRESSION1 IS 2'
DISPLAY 'EXPRESSION2 IS ANY'
WHEN OTHER
*-- EXREPSSION2 ハ ANYデカナラズ イッチスル
DISPLAY 'EXPRESSION1 IS NOT 1'
END-EVALUATE.
4.PERFORM VARYING UNTIL
⇔ for
COBOLとJavaでは、記法が結構変わってきます。
また、COBOLでは終了条件を記載しますが、Javaでは継続条件を記載します。
*--1---------2---------3---------4---------5---------6
*-- 10カイ LOOP
*-- I ハ 1 カラ 1 ズツ フヤシテ I > 10 ニ ナルマデ
PERFORM VARYING I FROM 1 BY 1
UNTIL I > 10
DISPLAY 'LOOP:' I
END-PERFORM.
MAIN-E.
STOP RUN.
// iは1から1ずつi++でインクリメントして、i <= 10の間
for (int i = 1; i <= 10; i++) {
System.out.println("Loop:" + i);
}
5.PERFORM UNTIL
⇔ while
結局のところ、COBOLでループを使用するときは、PERFORM
です。
UNTIL
のみ残すことで、オープン言語におけるwhile
と同じになります。
*--1---------2---------3---------4---------5---------6
PERFORM UNTIL I > 10
DISPLAY 'LOOP:' I
ADD 1 TO I
END-PERFORM.
int i = 1;
while (i <= 10) {
System.out.println("Loop:" + i);
i++;
}
最後に
ここまでCOBOLとJava(オープン系言語)の比較をしてきました(後半なぐり書きみたいになりましたが…)。
もちろん、COBOLとJavaの違いなんて、こんなものではありません。あくまで基礎の一部を書いたまでになります。
ですが、この3シリーズ(導入・構造編・本編)で、マイグレーションに従事する方やこれから業務がCOBOL⇔オープンに変わる方に、少しでも支えになれば幸いです。
以上で【俺的】COBOL→Java言語移行ガイドを全編終了します。ありがとうございました。