ページの本文へ

Hitachi
お問い合わせお問い合わせ

COBOL2002:COBOL技術者の育成
〜もう一つの言語としての習得〜

COBOL技術者の不足の解決には

 

近年、COBOLを扱うことのできるプログラマーの不足についての懸念の声が聞かれます。この懸念に対しては、既存プログラマーにもう一つの言語としてCOBOLを習得してもらうことが解決策の一つになります。

COBOL習得のハードルを下げるには

 

COBOL自体は特別な言語ではないので、既に他のプログミング言語に慣れている人なら、ことさら習得の難しい言語ではありません。ただし、COBOLは見た目の印象も違うし、既知の言語の知識と対応の取りにくい用語や概念もあります。これらがCOBOLを習得しようとする人に違和感を与え、心理的な壁となりえます。

ここでは、既存プログラマーがCOBOLに対して感じるであろう違和感について、代表的なものをいくつか紹介します。新たにCOBOLを使うことになったとき、ここに紹介する特徴的な違いにあらかじめ触れておくことで、COBOL習得に対する心理的ハードルが下がると期待します。

ここから先は、違和感の元になりそうなプログラム言語の仕様の違いについて、大きく4つの面に分けて、例を使って説明します。COBOLを習得しようとしている既存ブログラマー向けの内容になります。

(1) 用語や概念
既知の言語とCOBOLとで、用語や概念の対応が取れないと違和感につながります。
(2) ソースプログラムの見た目や書き方の違い
ソースプログラムの印象が違うことも、近づきにくさにつながります。
(3) 実行順序の制御の違い
COBOLでは、プログラムのさらに内側に作る制御構造を多用します。他の言語には見られない構造です。
(4) 変数の型の扱いの違い
変数の定義に、桁数と用途という属性を指定します。整数型、浮動小数点型、文字列型といった型とは異なる考え方で定義します。

よく違和感を持たれる特徴的な違い

 

1. 用語や概念

(1) COBOLは、C言語などで使われる用語が定着する前から存在するプログラミング言語なので、古い用語を使っています。概念的に対応するものは対応させて理解できます。

図@

(2) もっぱらCOBOLにだけある概念もあります。これらは備わっているものとして、ひとつひとつ理解していくことになります。
例: 読み書きするファイルに種類がある
順ファイル(順番に読み書きする)
相対ファイル(レコード番号で読み書きする)
索引ファイル(キーの値によってレコードを読み書きする)

2. ソースプログラムの見た目や書き方の違い

COBOLのソースプログラムは、見た目が特徴的です。また、実際に書こうとすると、ソースプログラムの行の使い方にも違いがあります。
(1) 大文字ばかり
COBOLは、小文字も使える言語です。ただし、小文字と大文字は等価になります。MYDATAもMyDataもmydataも同じです。大文字だけのプログラムが多数存在しているので、COBOLは大文字ばかりというイメージがあります。

(2) 括弧をあまり使わない
プログラムの記述では、ここからここまでの範囲、というような枠構造を作ります。複数の文をまとめたりする場合です。枠構造は入れ子になります。多くのプログラム言語では、構造を表すのに括弧を多用します。しかし、COBOLでは、関数の引数、配列の添字、算術式などを除けば、枠構造を閉じるのにも単語を使う傾向があります。

(3) 予約語が多い
予約語は、プログラム中で特別な意味をもち、ユーザ変数などの名前に使えない単語です。2014年のCOBOL国際規格で、約400語が予約語となっています。COBOLは、新しい機能には新しい予約語を目印として導入してきた結果、多数の予約語ができてしまいました。気を付けていないと、ブログラミングで変数名に予約語を使ってしまいます。

(4) ソース行の桁に意味がある
プログラムは、行の8桁目から書き始めます。その左側の1〜6桁目は一連番号用、7桁目は標識用に使われます。標識は、コメント行か通常の行かなどを区別します。一方、行の右側の端について、COBOLの国際規格は、各コンパイラが桁数を決めることとしています。典型的にはCOBOLソースは1行80桁で、8桁から72桁までにプログラムを書き、73桁から80桁を別の目的で使用しています。

図A

ここまでの説明は固定形式の書き方です。2002年のCOBOL国際規格から、自由形式の書き方も導入され、桁を意識せずにソースプログラムを書けます。しかし、自由形式でのコーディングは全く新しいCOBOLプログラムにほぼ限られ、固定形式で書かれたCOBOL資産は、プログラムに変更を入れる場合でも固定形式のまま残ります。

3. 実行順序の制御の違い

COBOLには、他のプログラム言語には見られない制御構造があります。

(1) プログラムは節と段落でできている
COBOLでも、プログラムや関数といった独立した単位を複数作ります。実行時に、それらを呼び出し合いながら処理を進めていきます。COBOLに特徴的なのは、プログラムの中に、文をまとめる段落や、段落をまとめる節、という単位があることです。英文に近い形でプログラムを書くというCOBOLの言語設計方針から来ているものと思います。節や段落の先頭には、節名や段落名が付きます。節や段落の終了は次の段落や節が始まる直前であり、見た目は、範囲をもつ枠構造になっていません。

図B

GO TO文は、節名や段落名を単なる行先ラベルとして扱います。一方で、段落名や節名を指定して、その段落や節に含まれる一連の文を実行してから元の文に制御を戻すように指示する文が複数存在します。このように、同じ段落名や節名の指定でも、ある文では行先ラベルであり、ある文では段落や節という単位の実行を指示する、という二面性があります。

(2) ピリオドが強力なストッパーになっている
COBOLでは、ピリオドが文や文の並びの終端を意味します。英文の書き方をなぞった仕様です。一方で、IF文の範囲を閉じるにはEND-IFを使うといった形で、文の開始とその文を閉じる単語を対応させて枠構造を作れます。また、そうした枠構造を幾重にも入れ子構造にできます。

COBOLのピリオドは、入れ子構造の途中でも、一番外側の文を終わらせます。構文を途切れさせる強力な記号になっています。ピリオドの仕様は、文の入れ子構造と相性が良くありません。

図C

4. 変数の型の扱いの違い

COBOLでは、変数の定義に特異な属性を指定します。また、複数の変数をまとめた変数の扱いでは、下位の構造は考慮されません。
(1) COBOLで変数の型は趣が違って、基本は、桁数と用途で指定します。

図D

表示用途の変数に格納するのは、いわゆる文字列なのですが、各桁が数字であるように宣言した表示用途の変数はそのまま演算の対象にできます。したがって、表示用途の数字桁数15桁の変数で、計算することがありえます。

(2) 集団項目はそれ自体が表示用途の変数です。
下の例で、"基本項目E1"、"基本項目E2"、"基本項目E3" は基本項目と呼ばれる変数です。集団項目とは、基本項目をまとめたもので、下の例では、"集団項目G1" は、下位の "基本項目E1"、"基本項目E2"、"基本項目E3" を束ねています。この例でわかるように、集団項目の階層構造は、変数を定義する行の先頭に書く番号の大きさで表現します。

図E

集団項目は、下位の構造を意識しません。"集団項目G1" は、表示用途で33桁である次の変数と同様に扱われることになります。

図F

他のプログラム言語では、集団項目に相当する構造を名前付きの型にして、その型の変数同士の代入は、下位の階層構造も共通なので安全だから許すが、型の異なる変数同士の代入は安全でないので許さないなどと説明したりします。しかし、COBOLの集団項目は、領域を表すだけの変数と扱われます。下位の階層構造は意識されずに転記(代入)できます。

なお、2002年のCOBOL国際規格からは、名前付きの型が定義できるようになり、その型に基づく集団項目が定義できるようになっています。この仕様を使うと、型が異なる集団項目同士の転記はできません。

COBOLのスムーズな習得に向けて

 

既存のプログラマーがCOBOLに触れたときに感じるだろう代表的な違和感について説明してきました。COBOLを扱う技術者の減少には、一人でも多くの既存プログラマーがCOBOLも習得することが解決策の一つになります。もう一つの言語としてのCOBOLを扱うことが必要になったとき、事前にこうしたCOBOL特有の違いに触れ、心理的なハードルが下げてから習得に臨んでみてください。

  • COBOL言語の基礎から習得できる言語研修をご用意しております。
    言語研修はこちら
  • COBOLについてのさまざまな情報は、COBOLコンソーシアムでも紹介されています。
    COBOLのはなしをご覧ください。