COBOLを書いていて「USAGE句って何のためにあるの?」と感じたこと、ありませんか?
DISPLAYとかCOMPとかCOMP-3とか、見た目は似ていても中身はまったく別物です。知らないまま使っていたら、処理速度が落ちたり、データがうまく扱えなかったり…ちょっと怖いですよね。
この記事では、USAGE句の基本的な用途と意味、代表的な種類の違い、初心者でもすぐわかる使い分けのコツをわかりやすく解説します。
「COBOLって古いけど、使いこなせると意外とカッコいいじゃん?」と思える内容になっているので、ぜひ読んでみてください。
COBOLのUSAGE句とは?まず知っておきたい基本的な役割
USAGE句とは、データがコンピュータの中でどんな形で保管されるかを決める宣言です。ちょっとした「変数の収納方法の指定」と考えるとイメージしやすいかもしれません。
たとえば、洋服をたたんで引き出しにしまうのか、ハンガーで吊るしておくのか。その違いがあるように、数字や文字もメモリに保存する方法にバリエーションがあります。
COBOLでは、「このデータは文字として保存してね」とか「この数値は計算が速くなるような形で持っておいてね」といった感じで、USAGE句を使って細かく指定します。
指定のしかた次第で、処理のスピードが上がったり、メモリの節約ができたりするんです。プログラムを書くうえで、思ったより地味だけど効果は大きい存在ですね。
なぜUSAGE句でデータ形式を指定する必要があるの?
「わざわざ指定しなくても動くのに、なんでそんな面倒なことを?」と感じる方も多いと思います。でも、コンピュータの中では文字と数字はまったく別物なんです。
文字は見た目重視、数字はスピード重視。たとえば「1234」という数字も、文字として扱えば「1」「2」「3」「4」と1文字ずつ保存されますが、数値として処理するともっとコンパクトで高速に扱えるんです。
コンピュータ側からすれば、「文字で渡されると計算しにくいんだよ…」とつぶやきたくなるかも。USAGE句は、そんな内部処理の“都合”をコントロールする仕組みです。
ざっくり言えば、計算メインならCOMPやCOMP-3、表示メインならDISPLAYと使い分ける感じですね。
たとえばCOMP形式にすると、計算が速くなる代わりに人間には読みにくくなります。PACKED-DECIMAL(COMP-3)にすると、容量は半分くらいに節約できる場合もあります。
【基本】USAGE IS DISPLAY句の用途と特徴
USAGE句の中でも、一番なじみ深いのがDISPLAY句です。というか、何も指定しなければ自動的にこの形式になります。
DISPLAYは「文字のまま保存する」タイプで、人間にとって読みやすい形式が特徴です。たとえば、数字を文字として表示したいときや、帳票に出力したいときにはこの形式が向いています。
イメージしやすいように、簡単な例を見てみましょう。
01 NAME PIC X(10). 01 ZIP-CODE PIC 9(5).
このように宣言すると、文字や数字がそのままの形で保存されます。数字でも、見た目どおり「1」「2」「3」「4」「5」と文字コードで並びます。
表示や印刷にはぴったりですが、計算させたいならちょっと工夫が必要。まずはDISPLAYで文字として扱って、そこからステップアップしていくと、理解が深まります。
【数値計算の定番】USAGE IS COMPUTATIONAL (COMP) 句の用途と特徴
数値計算といえばCOMP句(COMPUTATIONAL)。コンピュータが一番得意とする「バイナリ形式」で数値を保存する方式です。数字を文字として扱うよりも、断然スピードが出ます。
たとえばループのカウンターや、計算処理がメインの項目などでは、DISPLAYよりもCOMPの方が向いています。理由は単純。計算が圧倒的に速くなるからです。
人間には読みにくくなりますが、コンピュータは大喜び。数字をそのまま「機械語っぽく」保存しておけば、いちいち文字変換しなくて済むからです。
ただし、処理系(OSやCOBOLの種類)によっては、COMPの内部形式がちょっとずつ違うこともあります。でも、今の段階ではそこまで気にしなくてもOKです。
01 CNT PIC 9(4) COMP.
このように書くと、CNTという項目は4桁の数値をバイナリ形式で保存するようになります。読みやすさよりもスピードを重視したい場面で大活躍です。
COMP句の種類について(COMP-1, COMP-2など)
少し発展的な話ですが、COMP句にもいろいろ種類があります。
- COMP-1:単精度の浮動小数点数(小数を扱うけど、ちょっと誤差が出る)
- COMP-2:倍精度の浮動小数点数(より高精度だけど、容量も増える)
ただ、事務系の処理ではこの2つを使うことはあまりありません。まずは基本のCOMP(バイナリ形式)と、次に紹介するCOMP-3(パック形式)を覚えておけば、現場ではほぼ困りません。
【容量節約】USAGE IS PACKED-DECIMAL (COMP-3) 句の用途と特徴
数字が多くなると、保存スペースもバカになりません。そんな時に使えるのがCOMP-3(PACKED-DECIMAL)です。数字をギュッと詰めて保存する形式で、表示用ではなく保存や計算用にぴったりです。
文字形式(DISPLAY)は1桁あたり1バイトを使いますが、COMP-3は2桁で1バイト、つまり約半分の容量で済むこともあります。大量データを扱う業務では、かなりありがたいですね。
たとえば、金額や取引件数のように、桁数の大きな数字をファイルに保存する場合によく使われます。
保存形式のイメージを簡単に比較してみましょう。
種類 | 数値「12345」の保存イメージ |
---|---|
DISPLAY | 1 2 3 4 5(各桁1バイト) |
COMP-3 | 12 34 5C(2桁で1バイト、末尾に符号) |
人間が見るにはちょっと難解ですが、保存効率はバツグン。数字をたくさん扱う場面では、まさに頼れる存在です。
他にもある?知っておきたいUSAGE句(BINARY, INDEXなど)
補足として、他にもUSAGE句にはいくつか種類があります。
BINARY句はCOMPとほぼ同じ意味で使われることが多く、処理系によってはまったく同じ扱いになります。バイナリ形式で保存して、計算をスムーズに行いたいときに使われます。
INDEX句はちょっと特殊で、テーブル(配列)の添え字を操作するために使います。単独で何かをするというより、テーブルとセットで使う形ですね。
とはいえ、最初のうちはDISPLAY・COMP・COMP-3の3つをしっかり覚えておけば十分です。まずは基本をマスターしてから、少しずつ他の形式に手を広げていきましょう。
【実践】COBOL USAGE句の使い分け:簡単な選び方のヒント
USAGE句っていろいろあって迷いますよね。でも大丈夫。目的に合わせて選べば、そんなに難しくありません。まずは「何に使うか」をハッキリさせましょう。
迷った時は、下のチェックポイントを見てみてください。
- 人に見せるため(画面・帳票・ファイル出力)なら → DISPLAY
- 計算処理がメイン(ループや合計など)なら → COMP
- 桁数が多くて容量を節約したいとき → COMP-3
もう少し分かりやすく、フローチャート風にするとこんな感じです。
【USAGE句 選び方】 ↓ 画面や帳票に出力する? └─ はい → DISPLAY ↓ 数値計算が中心? └─ はい → COMP ↓ 桁数が多くて容量も気になる? └─ はい → COMP-3 ↓ 特別な使い道(添字操作など)? └─ はい → INDEX(またはBINARY)
もちろん、現場によっては「会社のルールで必ずCOMP-3を使う」など決まっていることもあります。そういう時はルールを優先してくださいね。
完璧じゃなくても大丈夫。まずは「自分で選ぶ感覚」を育てるところから始めましょう。
USAGE句を使ったサンプルプログラム
実際にCOBOLでUSAGE句を使ったコードを見てみましょう。今回はDISPLAY・COMP・COMP-3の3つを並べて、どんな違いがあるかを比較してみます。
IDENTIFICATION DIVISION. PROGRAM-ID. USAGE-SAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 DISPLAY-VALUE PIC 9(5) VALUE 12345. 01 COMP-VALUE PIC 9(5) COMP VALUE 12345. 01 COMP3-VALUE PIC 9(5) COMP-3 VALUE 12345. PROCEDURE DIVISION. DISPLAY "DISPLAY形式: " DISPLAY-VALUE. DISPLAY "COMP形式: " COMP-VALUE. DISPLAY "COMP-3形式: " COMP3-VALUE. STOP RUN.
このサンプルでは、同じ「12345」という数値を3つの形式で定義しています。それぞれの違いを簡単に見てみましょう。
項目名 | USAGE句 | 用途 | 特徴 |
---|---|---|---|
DISPLAY-VALUE | DISPLAY(省略可) | 画面や帳票の表示用 | 読みやすいが容量が大きめ |
COMP-VALUE | COMP(バイナリ) | 計算処理に使う | 計算が速いが読めない |
COMP3-VALUE | COMP-3(パック10進) | 容量節約しながら数値を保存 | 桁数が多いデータに向いている |
実行結果は一見どれも同じ「12345」に見えますが、内部ではまったく違う形で保存されています。まるで同じ料理でも、お弁当箱に詰めるか、皿に盛るかで見た目も使い勝手も変わるようなものですね。
このサンプルをベースに、自分で数値を変えたり、表示方法を工夫したりして、USAGE句の違いを体感してみると理解がグッと深まります。
【まとめ】COBOL USAGE句の用途を理解してステップアップ!
USAGE句は、データをコンピュータの中でどう扱うかを決める宣言
使い分けができるようになると、COBOLプログラムの効率もグンと良くなります。数字の扱いにムダがなくなり、処理が軽くなることもあります。
どれを選べば良いか迷った時も、目的を意識すれば自然と答えが見えてきます。表示?計算?容量?目的別に選ぶクセをつけると、判断がどんどん速くなります。
これでUSAGE句マスターに一歩近づきました!次にコードを書くときは、ちょっとだけ意識してみてください。いつものCOBOLが、少しだけ賢く見えるかもしれません。
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。