RPG

529. なぜRPGが難しいのか?(1)

RPGはやさしい開発言語としてユーザーでも
自社開発できるようにと生まれた言語である。
しかしここにきてとっつきにくいと評される難しさが
目立ってきた。

長年RPGだけに携わってきた人にとって
RPGが難しいものだと言われても感じにくいのかも知れない。

■ 書きやすい。でも読みにくい

_

元々RPGの演算命令は一行につきひとつの演算に
限られていた。

請求金額 = (定価 x 数量) x 1.1 + 送料

という計算を使用とすると

1. 請求金額 = 定価 x 数量

2. 請求金額 = 請求金額 x 1.1

3. 請求金額 = 請求金額 + 送料

という3段階の演算が必要となる。
つまり演算命令は一回(=一行)につき一回しか
使えないのである。
従って3個の演算は3行の演算命令に
分割して記述しなければならない。
これは初めて記述する人にとって
面倒ではあるがやさしい記述である。

しかし

請求金額 = (定価 x 数量) x 1.1 + 送料

この式を知らない状態で

1. 請求金額 = 定価 x 数量

2. 請求金額 = 請求金額 x 1.1

3. 請求金額 = 請求金額 + 送料

から

請求金額 = (定価 x 数量) x 1.1 + 送料

を算出することを想像してみて欲しい。
演算を記述するのは簡単であるが
結果の式を想像して理解することは簡単ではない。

請求金額 = (定価 x 数量) x 1.1 + 送料

をひとつの式として計算できないことが
RPGは書きやすいが読みにくい言語となってしまう。
つまり最初に記述する開発者にとってはわかりやすくて
簡単なように思えるが初めてそのRPGの記述を読む人にとっては
非常にわかりにくい言語となってしまう。
RPGはやさしく素人でも書けるようにと配慮した昔は
それで良かったのであるがプログラム言語が普及した現代では
冗長でしかない。

■ 論理構造がわかりにくい

フリー・フォーマットでは段落構造(=インデント)を
ようやく表現できるようになったのだが
固定記入式のRPG III やILE-RPGでは
演算命令の記入欄が 33桁目からと固定されていて
演算の流れ全体を構造化して表現することが
できない。
_

これはJavaやVBA, Python< VC++ などのオープン系言語から IBM iに入ってきた開発者から見ると非常に違和感を 感じるところである。 であるのにRPG III だけで10年以上も開発している人も いるのはIBM iが古いのではなくその開発者が古いのである。 構造化の IF-ELSE-END や DO- ENDがあったとしても 同じENDで済ますことができるのでやはりわかりにくい。 ENDの識別が必須になったのはフリー・フォーマットからである。 GOTO命令も多用できていたときは論理構造を複雑なものに していた。

■ キー・リストの問題

_

以外と気づかれていないのがキー・リスト(KLIST)の問題である。
RPGの演算命令の項目は項目1および項目2だけに限定されているために
複数のキー・フィールドによるキーの表現をキー・リスト(KLIST)として
ひとつの項目にまとめた。
ところがキー・リストの宣言を演算の最初にまとめて書くようにと
いう無意味な指導があったためにキー・リストと実際にキー・リストを
使用する演算の場所がはるか遠くに分かれてしまうという結果になった。

初めてそのプログラムを読む人はあちこちへとキー・リストの定義を
探し回らなければならないということになってしまう。

   SHKEY   KLIST
           KFLD        SHCODE
           KFLD        HNSCOD
           :
           ;
   SHKEY  CHAIN SHOHIN               99

これではキー・リストの内容をいちいち戻って調べなければならない。
本来ならば

  (SHCODE + HNSCOD) CHAIN SHOHIN               99

のようにキー・リストを使わずに記述できるようにしたほうが
読み手にとってわかりやすい記述となる。
この記述をフリー・フォーマットに取り入れなかったのは
残念である。