フリー・フォーマット RPG で対話型アプリケーション (はじめに)

サンプルプログラムのタイプ

今回、もともとマニュアルにあった RPG の対話型サンプルプログラムが、ちょうど以下のような 5250 対話型プログラムの典型になっているので、いくつかの方針に従って直した上でここで紹介してみました。

書き換えにあたっての方針

方針と言うのは、以下のようなことです。

サンプルプログラムをここで紹介してみるにあたって、以下の部分を書き換えています。

読み込む対象の PF を SQL で作成、それにともなってレコード様式名なども変更

SQL で読み込む対象となる可能性も考え、DDS で作成するより、今どきのインターフェイスに慣れておいた方がよいだろうと考えました。
ただし、論理ファイルや表示装置ファイルはその考え方を理解しておいた方がいいため、そのまま DDS を使用しています。

chain は KLIST ではなく、キーの指定、ないしは外部指定

なるべく固定フォーマットの C 仕様書をなくしたいので chain の指定のしかたを変えました。
      // キー・リスト定義
     C     CSTKEY        klist
     C                   kfld                    srcnam
     C     zipkey        klist
     C                   kfld                    name

          //setll cstkey cusrec;
          setll (srcnam) cusrec;

             // 得意先レコードを検索し、表示する
             //chain zipkey cusrec;
             chain (name) cusrec;


      // キー・リスト定義
     D cstkey        E ds                  extname(cusmstl2:*key)

     C     cstkey        klist
     C                   KFLD                    zip

          //setll cstkey cmlrec2;
          setll %kds(cstkey) cmlrec2;

サブルーチンはサブプロシージャに変更

サブルーチンは、プログラム全体をいくつかのさらに小さい部分に分割し、より単純な、限定されたロジックにすることで、よりバグの少ない堅牢なモジュールにしよう、という意図と、それに伴う、後でメインテナンスするときの読みやすさおよび修正のしやすさ、という二つの意図を持った、構造化プログラミング理論の産物です。
その二つはオブジェクト指向での"クラス"にそのまま継承されているわけなのですが、さらにプログラミング理論の発展の中で"クラス"に付け加えられたものが他にもあります。それはパラメータとローカル変数(ローカルメソッド) です。
処理を共通化させるのは、より単純な処理に分割すれば、それだけデバッグしやすく、読みやすく、いろいろなところに流用し易いが故に実績が積み重なりやすい処理になる、ということからです。(そうした処理を組み合わせて処理全体を構築する、というのが言わばオブジェクト指向のもともとの考え方と言えます)
サブルーチンもうまく分割されていれば同一プログラム内のいろいろなところで再利用できるわけですが、他のプログラムからは使用できません。(完全に独立した他のプログラム呼び出す、ということになりますね)
また、サブルーチンにはパラメータを渡すことができないので、似たような処理でも別のサブルーチンにして書くか、プログラム内のどこからでもアクセスできる変数 (グローバル変数) を使ってパラメータのように使用させるか、処理を共通化するためにはそのいずれかが自然な帰結になります。
その結果として、似たようなサブルーチンが増えてしまう、どこから変更されるかわからないグローバル変数への依存が発生してしまう、などといった問題がここから出てきます。
サブルーチンで、ローカル変数/ローカルメソッド(= エクスポートされないプロシージャ)を使用でき、他のプログラムからも使用でき、さらにパラメータを授受できるようにしたもの、それがサブプロシージャになります。
つまり、サブプロシージャがある以上、サブプロシージャではなくサブルーチンを使う続ける意味は、「慣れ」以外にはほぼない、と言えるでしょう。
わざわざ書き換えるのはそういうリファクタリング的なプロジェクトがあった時に余裕があれば、でいいと思いますが、これから書くものは積極的にサブプロシージャを使っていくべきだと思います。
特に気をつける点はほとんどありません。
思いつくところでは、LEAVESR というサブルーチンの中でしか使えない命令があります。これはサブプロシージャでは RETURN にあたります。同じ動きにできますので、書き換えの時は気をつければいいでしょう。

[Top Pageに戻る]

Ads by TOK2