RPG

458. ILE-RPGのススメ

ここまで組込み関数を中心に進化したILE-RPGの機能を紹介してきた。
ILE-RPGはRPG IIIに比べて難しいのではなくやさしくなっているのである。

RPG IIIに執着していつまでもRPG IIIで開発している人からみれば
ILE-RPGは覚えなければならないことが多くて難しいと感じているのかも
知れない。
しかしILE-RPGはRPG IIIに比べて直感的ではるかにわかりやすくできている。

久しぶりにRPG IIIを書いてみると実に不便なことが多い。

[文字列の結合: TESTCAT ]

ソースはこちらから

0001.00      H        1   Y/                                                      TESTCA
0002.00      F**********  文字列の結合 ****************************************         
0003.00      F*                                                                         
0004.00      F*****************************************************************         
0005.00      E                    AUT     1   1 32                見出し                
0006.00      I            DS                                                            
0007.00      I                                        1  10 PGM                         
0008.00      I                                       11  20 OBJLIB                      
0009.00      I                                       21  30 SRCF                        
0010.00      C                     MOVEL'CRTRPG ' CMD   128                             
0011.00      C                     CAT  OBJLIB:1  CMD                                   
0012.00      C                     CAT  '/':0     CMD                                   
0013.00      C                     CAT  PGM:0     CMD                                   
0014.00      C                     MOVEL'SRCFILE' SRCF#  10                             
0015.00      C                     CAT  SRCF#:0   CMD                                   
0016.00      C                     CAT  '/':0     CMD                                   
0017.00      C                     CAT  SRCF:0    CMD                                   
0018.00      C                     CAT  AUT,1:0   CMD                                   
0019.00      C                     SETON                     LR                         
0020.00      C                     RETRN                                                
0021.00 ** AUT                                                                          
0022.00 AUT(*ALL)   


                                                                    

[解説]

RPG IIIを記述すると次々と不便なところや問題点が出てくる。

①プログラム名が6桁までしか記述できない。
…H仕様書で右端のプログラム名の記入欄が5桁までしか記入することができない。
実際プログラム名は10桁まで使えるので6桁しか記入できないのはおかしい。

②仕様書の間にスペース行を入れることができない。
…I-仕様書やC-仕様書の分かれ目を見やすくしたいとプランク行を入れようとしても
SEUのエラーとなって挿入することができない。

③入力仕様書で独立変数を定義することができない。
…これが最も不便でJava, VBA, C言語など一般の開発言語では演算の最初に変数の定義を
   記述することが一般的であるがRPG IIIでは DSで定義するしか方法がない。

④演算の項目が10桁では足りない。
…固定情報を演算命令に記述しようとするとすぐに記入欄の長さが足りなくなってしまう。

⑤一度にひとつずつの演算しか記述することができない。
…演算命令を書く欄が決まっているのでひとつずつしか演算を記述することができない。
そのため演算の記述が無駄に冗長になってしまいわかりにくくなる。

… RPG IIIだけに慣れている人は当たり前のことだと思うかもしれないが
それでは上のプログラムをILE-RPGで記述してみよう。

[文字列の結合: TESTCAT ]

ソースはこちらから

0001.00 H DFTNAME(TESTCAT) DATEDIT(*YMD/) BNDDIR('QC2LE')                        
0002.00 H DFTACTGRP(*NO)  ACTGRP(*NEW)                                           
0003.00 F**********  文字列の結合 *********************************************  
0004.00 F*                                                                       
0005.00 F**********************************************************************  
0006.00 D CMD             S            128A                                      
0007.00 D PGM             S             10A                                      
0008.00 D OBJLIB          S             10A                                      
0009.00 D SRCF            C                   CONST('QRPGLESRC/QTRSRC')          
0010.00 D AUT             C                   CONST('AUT(*ALL)')                 
0011.00                                                                          
0012.00  /FREE                                                                   
0013.00     CMD ='CRTRPG ' + %TRIMR(OBJLIB) + '/' + %TRIMR(PGM) + ' ' +          
0014.00            SRCF + ' ' + AUT;                                             
0015.00     *INLR = *ON;                                                         
0016.00  /END-FREE  


                                                             

[解説]

①プログラム名は10桁までDFTNAME(TESTCAT)として記述できる。

②仕様書の間にスペース行を入れることができる

0011.00                                                                          

③定義仕様書で独立変数を自由に宣言することができる。

0006.00 D CMD             S            128A                                      
0007.00 D PGM             S             10A                                      
0008.00 D OBJLIB          S             10A                                      
0009.00 D SRCF            C                   CONST('QRPGLESRC/QTRSRC')          
0010.00 D AUT             C                   CONST('AUT(*ALL)')  

④演算の項目欄は大幅に拡張されており特にフリー・フォーマットでは
長さに不自由することはない。

⑤必要な演算はまとめて書くことができ文字列の結合は CAT命令より +記号で
 記述したほうがはるかに直感的でわかりやすい。

0012.00  /FREE                                                                   
0013.00     CMD ='CRTRPG ' + %TRIMR(OBJLIB) + '/' + %TRIMR(PGM) + ' ' +          
0014.00            SRCF + ' ' + AUT;                                             
0015.00     *INLR = *ON;                                                         
0016.00  /END-FREE 

■ ILE-RPGはやさしい言語として進化している

 上記のふたつのプログラムを見てどちらがやさしいと感じるだろうか?
RPG IIIのようにCATばかりの組合せでは頭の中で変数の変化を想像しながら
プログラムを読まなければならない。
一体このプログラムを何をやっているのかと想像するしかないのである。
しかしRPG IIIしか知らなくて ILE-RPGを敬遠している人は

● やっとRPGを覚えたのにこれ以上は勉強はしたくない
● ILE-RPGはよく知らないだけでよくわからない。

との理由が考えられる。後者の知らないだけであるは良いのだが
前者のようにこれ以上勉強したくないというタイプの人は残念だがIT業界には向いていない。
ITの業界は毎日が勉強であるし新しいことを学習することに面白さを感じるようで
なければならない。
毎日同じことを繰り返すことは肉体労働と変わりはない。

 さてご覧のようにRPG IIIに比べてILE-RPGのほうがはるかにやさしい言語として
進化している。

●組込み関数はILE-RPGだけ
….組込み関数は演算命令を直観的なものにしてよりわかりやすくする。
RPG IIIにはこのようなやさしくなる機能は用意されていない。

・フリー・フォーマッテトもILE=RPGだけ
….オープン系のJavaなどを最初に学習した人から見れば演算命令に固定式の枠にはまった記述が
どうにも狭苦しいようで我慢ができないようである。
固定式記述の最大の問題はインデント(=段落)がないために構造がわかりにくくなっていることである。
一時期に「構造化プログラミング」と言ってIF-ELSE-END の書き方が推奨されたのだが
肝心の演算命令にインデントがないのでIF-ELSE-END を重ねて書くと余計にわかりにくく
なってしまっていた。
また RPG IIIのEND命令はIFのENDだけでなくDOのENDにもなり得るので識別が明確でない。
ILE-RPGであれば ENDIFや ENDDOのようにENDの目的が明確になっているので
わかりやすくなる。
ILE-RPGのフリー・フォーマットで記述すればインデントをつけて見た目にも
構造化がより明確になるのでデバッグや読むのもわかりやすくなる。
 
あるソフトウェア会社は今でも大規模な開発をすべてRPG IIIで始めると聞いて
大変驚いた。
力仕事としてソフト開発会社が引き受けるのはよいが
いつまでもRPG IIIに固執している開発会社はどうなんだろうと
感じてしまう。
多くのユーザーを見ているとやはり情報システム室で自社開発している
ユーザーのほうが技術力においても優れていると感じることが多い。
優秀な人が多いのも事実である。

さて開発効率やデバッグ効率もILE-RPGに比べてRPG IIIは劣っている。
RPG IIIしか知らない人はあらたにILE-RPGを覚えるのは難しいと感じるようだが
そうではなくやさしくなるのである。
新しいことを覚えるのにいつまでも躊躇しているようでは進歩はない。
そういう意味でもソフト会社のプログラマーより自社開発しているユーザーのほうが
はるかに先輩からの技術力も継承されていると感じる。

技術力に優れた開発室のユーザーはここで推薦するよりはるかに
フリー・フォーマットも駆使して活発に開発していてたまにRPGソースを
見せてもらうと大したものだと感心してしまうことが多い。

ILE-RPGになれば言語は進化してやさしくわかりやすくなっているのである。
そのことに気づかずにRPGは古いと嘆いて他の言語に変えようとしている
ユーザーもごくたまにいることもあるが余計に難しい言語に入り込んでいるだけである。
確かにJavaの開発人口は多いがほとんどの開発者は実用的な開発力のない者ばかりである。
RPGは開発人口は少ないが最低限の労力で最大限の効率を上げることが出来る言語である。

これはRPGだけでなくCOBOL, Java, VBA, C++, VB, VC++ を開発してきた経験から
言えることである。
RPGであれば一本のプログラムを開発するのにものの半日か1日もあればできるが
JavaやC言語では早くても数日かかってしまう。
開発効率が他の言語とR`Gとでは全く違うのである。
ソリューションの開発でもC言語による開発がやはり大半であるが
データ・ベースを扱う場面ではRPGで開発することが多い。
データ・ベースへの入出力はRPGのほうが効率よく開発することができる。
一般の人はご存知ないだろうがデータ・ベースへのアクセス速度もC言語より
RPGのほうがスピードが速いのである。

 RPG IIIで開発しているのであれば ILE-RPGに移行すれば開発はもっとわかりやすくなる。


 

■ RPG IIIは20年以上前に終わった言語である

ILE=RPGは i5/OS Ver3.1に発表されてリリーすされた言語である。
裏を返せばRPG IIIは20年以上前に進化を止めて終わった元号である。
RPG IIIでも開発できるからといっていつまで古式豊かな縄文式の開発言語で開発するのか?
特にソフト開発会社が未だに新規プログラムを RPG IIIで開発するのはいかがなものか?
RPG IIIで開発している会社はぜひILE-RPGへ一日も早く移行して欲しい。