RPG

445. RPGはなぜ難しいのか?

先に「RPGはなぜやさしいのか?」を紹介したが
一方でRPGを難しいと感じてしまう人がいるのも事実である。

それはJavaやVisualBASIC, VBA, JavaScriptなどの
イベント駆動型の言語を既に経験した人から見ると
RPGが難しいと感じてしまう場合がある。

■ メイン・ルーチンがあることへの違和感

初めからRPGやCOBOLからプログラムを始めた人は
メイン・ルーチンを書くことに何の違和感も問題を感じないが
他のイベント駆動型の開発言語からプログラムを
始めた人にとってはRPGやCOBOLのメイン・ルーチンがあることに
違和感を感じてしまう。
 
実はイベント駆動型の開発言語というのは
エンド・ユーザーの操作がメイン・メーチンであって
エンド・ユーザーがボタンを押したり機能キーを
押したりするときにボタンを押したときの動作を
記述する、機能キーを押したときの処理を記述すると
いうように何かの操作が発生したときの処理だけを
処理別に記述していくことになる。

この処理の発生のことをイベントと呼んでいる。

最初に画面を表示しておいて後はボタンを押したときの動作とか
機能キーを押したときの処理を別々に記述していくことなる。
ExcelのVBAなども同じでExcelからのイベント・メッセージを受取ったときの
関数を記述していくようになっている。
逆にこれも長いRPGの開発経験のある人からすると
どのメッセージがどの順番で送られてくるのか不明なので
不安に感じてしまう。

いずれにせよメイン・ルーチンはシステムの内部に隠蔽されていて
イベントに対する関数だけを記述する。
これがイベント駆動型の開発言語であり
Visual XXX という「Visual」と接頭語がつくMicrosoft系の
開発言語やJavaもイベント駆動型の開発言語である。
もちろんVBA(=Visual Basic for Application)もイベント駆動型である。

■ メイン・ルーチンが難しいと感じる人のために

Microsoft系の C++ や Basicという元もとの開発言語でも
メイン・ルーチンはちゃんと存在していた。
しかしMicrosoftによって VisualC++やVisualBASICでは
メイン・ルーチンはMicrosoftが提供するDLL野中に
隠されてしまってユーザーが記述するのは
イベントが発生したときの処理だけを記述するように
変えられてしまったのである。
従ってメイン・ルーチンが存在していた時代を知らないで
イベント駆動型のVisualXXXやJava最初に学習した人にとっては
メイン・ルーチンがあることにかえって違和感を覚えてしまうのである。

このようにしてイベント駆動型から初めてプログラムを記述する人にとっては
メイン・ルーチンがあることに違和感を覚えてしまうように
なってしまったのだがこれはMicrosoftによる功罪である。
メイン・ルーチンが難しいのではなくメイン・ルーチンはどの言語にも
あったはずなのにMicrpsoftが隠してしまったので難しく感じるように
なってしまったのである。

■ RPGにもあるカプセル化

実はRPGにもメイン・ルーチンを隠してしまうカプセル化というのが
あってそれは「RPGサイクル」である。
RPGの場合でもデータの一部が変化することをユーザー自身が
調べるのではなくOSが内部で処理するのでユーザーは結果として
得意先コード順の並べておいたレコードの得意先が変わったときの
処理の書き方を簡単にするためにIBMはRPGサイクルというカプセル化を用意した。
指定したコードが変わったときに標識をオンにして制御するという方法である。
RPGの特徴的な「RPGサイクル」はメイン・ルーチンがある一方で
カプセル化もあるので慣れない人はこのRPGの癖に混乱するのだと思う。

■ ソフトウェア・メーカーによるカプセル化

Javaも初めからメイン・ルーチンは存在しない。
Javaもメイン・ルーチンが無いのでその便利な分だけ
自由性は失われている。

今回はJavaやVisualBASICのようなイベント駆動型から
RPGを初めて勉強する人のために実はJavaやVisualBASCIにも
メイン・ルーチンは内部で存在していることを理解して欲しいことを
投稿した。
メイン・ルーチンがあるのはおかしいのではなく
本来メイン・ルーチンもあったのだが隠されてしまったということを
理解して欲しい。

■ 標識

他の言語から来た人は標識という概念が良く理解しにくいようである。
ONまたはOFFを示す論理値をBOOL値という。
標識はこのBOOL値を示す変数である。
標識は他の言語でもBOOL値という論理値という概念の変数として
定義されているので他言語でも立派に存在している。
 
 
ただし他言語ではBOOL値という変数として定義されるので
RPGのように数字ではない。
最近ではRPGでも標識の代わりに変数で定義することも可能になっている。

その使用方法はこちらに紹介しているので参考までに。
RPGは時代に合わせて進化している言語である。
今ではXMLやJSON, UnicodeなどもRPGで扱えるようになっている。
JavaやVisualBASICが新しい命令が追加されたなどとはあまり聞いたことがないが
RPGは確実に時代とともに進化している言語でもある。

さて標識を難しいと感じるのは数字であるので数字だけでは無機質で
意味をとらえにくいからかもしれない。

もうひとつ標識をわかりにくくしているのは
標識を定義する人が次から次へと標識を新しく追加するので
読み手は何がなにやらわからなくなってしまう。
中には99まで使い切ってしまいましたとかいう人まで現れてしまう始末である。

小職は一時的な標識は50番と決めていて何度も50という標識を
再定義して使うようにしているので使う標識の数が増えるようなことはない。
NOT CHAIINのときは標識は 90でありエラーのときの標識はすべて99だけと
決めている。
それによって意味を覚え名群れ場ならない標識はほとんどない。

また最近では標識を使わずに %xxxxという別の変数で表現できるようにも
RPGは進化している。これは別の機会にまとめて紹介する。

要は標識の使い方が下手だとプログラムも確かにわかりにくく
なってしまう。
それは標識が難しいのではなく標識の使い方が適切でないからである。