導入
前のレッスンの ADD・SUBTRACT・MULTIPLY・DIVIDE は読みやすい反面、複雑な計算式では何行にも分かれて冗長になります。もっと数式らしく、まとめて書きたいときに使うのが COMPUTE文 です。
説明
COMPUTE文は、多くの言語のように = と算術記号を使って計算式を1行で書けます。
01 WS-PRICE PIC 9(6)V99 VALUE 1000.
01 WS-QTY PIC 9(3) VALUE 3.
01 WS-TAX-RATE PIC V99 VALUE 0.10.
01 WS-TOTAL PIC 9(7)V99.
PROCEDURE DIVISION.
COMPUTE WS-TOTAL = WS-PRICE * WS-QTY * (1 + WS-TAX-RATE).
DISPLAY WS-TOTAL.
*> 結果: 3300.00(1000 × 3 × 1.10)
COMPUTEで使える演算子は次のとおりです。
| 演算子 | 意味 |
|---|---|
+ | 足し算 |
- | 引き算 |
* | 掛け算 |
/ | 割り算 |
** | べき乗 |
( ) | 優先順位の指定 |
先ほどの ADD ... TO ... GIVING ... を使った計算とCOMPUTE文を見比べてみましょう。
*> ADD/MULTIPLYを使う場合(複数行に分かれる)
MULTIPLY WS-PRICE BY WS-QTY GIVING WS-SUBTOTAL.
COMPUTE WS-TAX = WS-SUBTOTAL * WS-TAX-RATE.
ADD WS-SUBTOTAL TO WS-TAX GIVING WS-TOTAL.
*> COMPUTEを使う場合(1行にまとまる)
COMPUTE WS-TOTAL = WS-PRICE * WS-QTY * (1 + WS-TAX-RATE).
複雑な計算式では圧倒的にCOMPUTE文が読みやすくなります。一方、ADD A TO B(英語の文)は、単純な足し算1つだけをはっきり示したいときには今でもよく使われます。実務のCOBOLコードでは、両方の書き方が状況に応じて使い分けられています。
試すには
3つの商品の小計を足して合計を求め、そこに10%の消費税をかけて税込み合計を出す計算を、COMPUTE文1行で書いてみましょう。カッコの使い方(掛け算より先に足し算をさせる)を意識してみてください。