COBOLはじめの一歩

新刊『実践 COBOLプログラミング入門』の著者、結城圭介氏に、COBOLの特徴や他のプログラミング言語との違いなどを簡単に紹介していただきました。


こんにちは、COBOLです

COBOLという言葉は知っていても、実際にCOBOLのプログラムを見たことがない方はたくさんいると思います。そこで、COBOLのプログラムはどんなものなのか、最初に例を見て頂きましょう。これは、世界で一番(?)短いCOBOLのプログラムです。

....+.*A.1.B..+....2....+....3....+....4....+....5....+
000010 IDENTIFICATION              DIVISION.
000020 PROGRAM-ID.                 HELLOWORLD.
000030 PROCEDURE                   DIVISION.
000040     DISPLAY  "HELLO WORLD"  UPON  CONSOLE.
000050     STOP RUN.

このプログラムは、よくありがちな「ハローワールド」のプログラムです。実行すると、コンソール(≒画面)「HELLO WORLD」と表示されます。しかし、こんなに短いプログラムでもCOBOLと「初めまして」の方にはチンプンカンプンかもしれません…というのも、実は私がそうでした。高校生の頃、情報処理の時間に初めてCOBOLを習ったときのことです。

COBOLのプログラムは、まるで文章のよう

COBOLのコーディングスタイルは、VB(VB.net、VBA⁠⁠、C、Perlなど、他のプログラミング言語のコーディングスタイルと比べると、あきらかに異なるというか、独特な雰囲気があります。それが原因で難しそうに思えるCOBOLですが、部分、部分を見てみると、意外とシンプルです。

例えば、変数の内容を別の変数にコピーする場合、次のように書くことを想像すると思います。

変数Aの内容を変数Bにコピーする(一般例)
B = A

しかし、COBOLでは「MOVE文」という命令を使い、次のように書きます。参考までに、COBOLでは「変数」と言わず、⁠項目」⁠データ項目」⁠作業項目」などと表現します。

項目Aの内容を項目Bにコピーする(COBOL)
MOVE  A   TO  B.

他のプログラミング言語では、右辺の内容が左辺にコピーされますが、COBOLでは逆ということに気づくでしょう。もしかすると違和感を覚えるかもしれません。しかし、命令文を、あたかも文章を読むように左から右へ読んでいけばいいだけなのです。そうすれば、違和感もなくなります。それと、行末にピリオド(.記号)があるのにも注目です。文章を書くときも、区切りごとに「。」を書きますが、それと同じです。

また、何らかの計算を行うときは、次のように書くことを想像すると思います。

変数Aと変数Bの合計を変数Cに保存する(一般例)
C = A + B

これと同じことを行うとき、COBOLでは「COMPUTE文」という命令文を使い、次のように書きます。計算をするときは、⁠COMPUTE」という命令文を使うだけで、あとは(計算式は)他のプログラミング言語と似ているので、ほとんど違和感はないでしょう。

項目Aと項目Bの合計を項目Cに保存する(COBOL)
COMPUTE  C = A + B

変数? 項目? どうやって定義する?

さて、プログラムを作るときに欠かせないのが変数、COBOLならデータ項目です。例えば、VBAでは「Aを長整数型(Long型)にしてください」のように、変数名と型名を書きます。また、データ型ごとに格納できる桁数などが決められています。

整数を保存するためのAという名前の変数を宣言する(VBA)
Dim  A As Long

では、次はCOBOLです。項目名(≒変数)とその型を書くところまでは同じですが、同時に「項目の長さ」を指定するところが大きく違います。整数を扱うときでも「その項目は何文字分(何バイト)必要なのか」⁠符号は必要かどうか」を指定しなくてはならないのです。

整数を保存するためのAという名前の項目を宣言するする(COBOL)
03  A     PIC  S9(010).

COBOLの文法など難しいことは考えずに、上の例を見てください。この例では、VBAのLong型と同じ桁数(Long型は-2,147,483,648~2,147,483,647)を扱えるようにしています。項目名の定義は、だいたい想像がつくと思いますが、型と長さは「9(010)」の部分がCOBOL独特なので、違和感を通り越して意味不明かもしれません。

ちなみに、Sは符号付き、9は数値を意味し、長さはカッコ内に書きます。ちなみに、このように定義した項目では「-9,999,999,999~9,999,999,999」の値を扱えます。

それともう一つ重要なことがあります。項目名(A)の手前にある「03」です。これは、レベル番号といい、⁠データを階層構造で定義する」というCOBOL独特の定義です。本当はレベル番号についても話したいのですが、話し出すと本当に長くなるので、詳しくは本書「実践 COBOLプログラミング入門」をごらんください。

コボラーになろう!

駆け足でCOBOLの特徴や他のプログラミング言語との違いなどを簡単に見て頂きましたが、本書「実践 COBOLプログラミング入門」ではこういったCOBOL言語の文法的な内容に加えて、COBOLプログラミングの登竜門である順ファイル作成、マッチング、集計処理、印刷処理などのプログラミングテクニックを効率よく学ぶことができます。また、プログラミングに役に立つ様々なテクニックとCOBOL関数をTipsとしてまとめました。全体の雰囲気などを簡単にまとめると…

  1. プログラミング初心者の方には、初めは少し難しく感じるかもしれません。しかし、決して攻略できない内容でもありません!
  2. システム開発に携わる方で、突然COBOLでの開発に携わることになることになった方に朗報! 本書があればすぐにコボラー(COBOLer=COBOL使いの意味)の仲間入り!
  3. COBOLの文法的な知識だけでなく、プログラミングテクニックもバッチリ解説しているので、情報処理試験でCOBOLを選択しようと考えている方にピッタリ!
  4. 読み終わった後でも、文法、プログラミングテクニック、関数のリファレンスとして活用できる!

…と、いったところでしょうか。それと、システム開発に携わる方なら、Java、VBなど、複数のプログラミング言語を使えることと思います。あと1つプログラミング言語を何か押さえておこうと思ったときに、COBOLを習得しておくのはいかがでしょう? きっと、仕事の幅も自分自身のレベルもアップすると思います。