net COBOLって、どんな感じの言語なんでしょうか?サンプルコードを見ていきましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. LOGIN.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 USERNAME PIC X(8).
01 PASSWORD PIC X(8).
PROCEDURE DIVISION.
00-LOGIN.
DISPLAY "Username: ".
ACCEPT USERNAME.
DISPLAY "Password: ".
ACCEPT PASSWORD.
実行するとこうなります。
Username: john
Password: mypassword
COBOL(Common Business-Oriented Language)は、主にビジネス関連のアプリケーションを作成するために開発された高級プログラミング言語です。
COBOLは、他の言語と比べて古くて非効率な言語であり、複雑なプログラムを作成するのには向いていません。しかし、COBOLは非常に高い可読性を持ち、また可搬性も高いので、企業のプログラム開発においては今でも重要な役割を担っています。COBOLは、コンピューターが利用可能な演算子と機能を豊富に持つ他の言語(C、C ++、Javaなど)よりも複雑なビジネスプロセスを簡潔に実装できるように設計されています。
けっこう有名な例として、C言語で0.01を1万回足しても100にならないという話があります。
参考)C言語でfloatの0.01を1万回たすと100にならないのは... - Yahoo!知恵袋
#include
int main(void){
double a = 0;
int i;
for(i=0;i<10000;i++){
a += 0.01;
}
printf("a=%f\n", a);
return 0;
}
実行するとこうなります。
a=99.999999
これは、C言語が内部で2進数を使っているためにおこります。0.01を2進数に変換すると、0.000110011001100110011...という無限に繰り返される小数になります。これを「循環小数」といいます。
つまり、2進数では表現できない10進数の数が存在するということですね。
以下のような値も循環小数になります。
一方、COBOLでは、内部で十進数を使っているため、何事もなく正確な値が出てきます。
IDENTIFICATION DIVISION.
PROGRAM-ID. SUM-TEST.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC 9(4) VALUE ZERO.
01 SUM PIC 9(7)V99 VALUE ZERO.
PROCEDURE DIVISION.
MAIN-PROGRAM.
PERFORM ADD-SUM 10000 TIMES
DISPLAY "SUM: " SUM
STOP RUN.
ADD-SUM.
ADD 0.01 TO SUM
ADD 1 TO COUNTER
IF COUNTER < 10000
PERFORM ADD-SUM
END-IF.
実行するとこう。
SUM: 100.00
「ただ、0.01を1万回足しただけだが?」という感じの当たり前の結果。
ちなみに、10進数を値を保持するCOBOLは、データを大量に扱うときのメモリ効率が悪いという欠点があります。メモリ上に大量の数値を展開して、一気にドン!と計算するような処理は苦手で、バッチ処理的な計算が前提ということですね。
科学技術計算などでは、誤差ありきで処理をおこなうため、2進数ベースの言語が主流になっています。金融系のお金の計算だけは、1円違えば大騒ぎになるため、未だにCOBOLが使われているんですね。
関連)COBOLの将来性と需要
まとめるとこう。