6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【俺的】COBOL→Java言語移行ガイド(基本文法編)

Last updated at Posted at 2021-11-23

検証環境

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 DIVISIONWORKING-STORAGE SECTIONで定義しなければなりません。

COBOL
      *--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の場合、変数は使用したいとき、使用したい場所で定義することができます。記法は以下のとおりです。

Java
public static void main(String[] args) {
    // mainメソッドで使用可能なint型variableを定義
    int variable;
}

2.IFif

ifにおいては、COBOLとJavaで記法が似ている上、考え方はどちらも同じです。

COBOL
      *--1---------2---------3---------4---------5---------6
         IF    CONDITION
             THEN
                 DISPLAY 'CONDITION IS TRUE.'
             ELSE
                 DISPLAY 'CONDITION IS FALSE.'
         END-IF.
Java
if (condition) {
    System.out.println("Condition is true.");
} else {
     System.out.println("Condition is false.");
}

どちらもconditiontrueのときに、上側のロジックが走ります。
COBOLのほうが、どちらかといえばVB寄りの記法です。
ただし、「かつ」や「または」といった論理演算子については、COBOLとJavaでは違いがあります。

言語 COBOL Java
かつ AND &&
または OR ||

3.EVALUATEswitch

基本的な使用方法は、COBOLとJavaではあまり変わりません。

COBOL
      *--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.
Java
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では使用てきていた以下の記法は使用できません。

  • EXPRESSIONTRUEとして、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 UNTILfor

COBOLとJavaでは、記法が結構変わってきます。
また、COBOLでは終了条件を記載しますが、Javaでは継続条件を記載します。

COBOL
      *--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.
Java
// iは1から1ずつi++でインクリメントして、i <= 10の間
for (int i = 1; i <= 10; i++) {
    System.out.println("Loop:" + i);
}

5.PERFORM UNTILwhile

結局のところ、COBOLでループを使用するときは、PERFORMです。
UNTILのみ残すことで、オープン言語におけるwhileと同じになります。

COBOL
      *--1---------2---------3---------4---------5---------6
         PERFORM UNTIL I > 10
           DISPLAY  'LOOP:' I
           ADD 1  TO I
         END-PERFORM.
Java
int i = 1;
while (i <= 10) {            
    System.out.println("Loop:" + i);
    i++;
}

最後に

ここまでCOBOLとJava(オープン系言語)の比較をしてきました(後半なぐり書きみたいになりましたが…)。
もちろん、COBOLとJavaの違いなんて、こんなものではありません。あくまで基礎の一部を書いたまでになります。

ですが、この3シリーズ(導入構造編・本編)で、マイグレーションに従事する方やこれから業務がCOBOL⇔オープンに変わる方に、少しでも支えになれば幸いです。

以上で【俺的】COBOL→Java言語移行ガイドを全編終了します。ありがとうございました。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?