- 「必要性を感じないから。今のままで問題ないし」
- 「固定長フォーマットのコードの方が読みやすいから」
- 「フリーフォームでロジックを作ってもいいけど、フリーフォームで宣言するとSEUが壊れてしまうから」
- 「フリーフォーマットにしようにも既存のプログラムがあまりにもたくさんあるから」
- (非常に残念だけど)「うちのマネジャーに理解がなくてそうさせてくれないから」
1)インデントされたコードは読みやすい
フリーフォーマットでロジックを書けば、ステートメントをインデントしてコードの構造を示すことができます。ですから、入れ子になったIf文やSelect/When文のような込み入った論理ブロックを含む場合や、モニターブロック、入れ子やオーバーレイが用いられている複雑なデータ構造を含む場合には、コードがより簡単に理解できるようになるのです。 なぜコードの読みやすさが重要なのでしょうか。だって、コードを書くのが難しいとしても、コードを読むことまで難しくする必要はないですよね?コードが読みやすいほど、理解も簡単になります。書かれたコードが理解できればそれをすばやく変更でき、変更によってエラーが生じる可能性も低くなります。 でも、こんな声が聞こえてきそうです。 「インデントは必須じゃないし、もっと言えば、それを間違える可能性だってあるでしょ。その場合、さらに読み間違えやすくなって、インデントがない場合よりもずっと混乱するのでは?」 確かにそうかもしれません。そのため、最近のRDi(Rational Developer for i)では、RPGソースメンバーにある複数あるいはすべてのコードをフォーマット(または再フォーマット)してくれるという、素晴らしい機能が追加されました。インデントとして何個の空白を使用するかは設定で指定できます。これについては以下をお読みください。http://www.ibmsystemsmag.com/ibmi/developer/rpg/rdi-v95/
2)ソースコードでより効率的にスペースを使用できる
RPG IV開発者のほとんどは、めったに演算項目1のカラムを使用しません。それだけでなく、私たちはもはや単純な算術演算子だけを用いるわけではありません。特に組み込み関数を含むような式の多くは非常に長く、その式を書き終えるために複数行が必要になることも多々あります。その結果、固定長フォーマットのコードでは、左側には無駄な大量のスペースがあるのに、右側は多数の複数行ステートメントでごちゃごちゃ、という状況が頻繁に発生します。フリーフォーマットのロジックを使えば、式のためにより多くのスペースを使えます。編集スクリーンはいわば「クリーナー」であり、私たちは一度により多くのロジックを見ることができます。なぜなら、複数行にする必要性が減るからです。もちろん、コードをより読みやすくするために、プログラマーが複数行の使用を選択した場合は別ですが。 フリーフォームの宣言を用いれば、スペースをより効率的に使用できます。これは、14文字のD仕様書カラムに入りきらない変数名を定義しようとした際などには特に有効です。確かに、省略記号(…)を使用して、次の行に書けば書けるのですが、それではスペースの無駄遣いで、不格好です。 私たちは、今ではフリーフォームの宣言を用いるようになったため、変数やプロシジャに、より長くて意味のある名前をつけるようになりました。これは別に意図して長い名前をつけようとしたわけではありません。これまでのように「ProcessCustomer」や「ErrorMsgDisplay」などの許容される省略形を考えたりしなくて済むようになったからなのです。かつてのようなおぞましい省略記号や、さらに醜悪な古いRPG形式での難解な短縮名は必要なくなったのです。3)フリーフォーマットだけで使える新機能もある
さらに、フリーフォーマットのロジックだけで使える機能もあります。これは、実装の際にステートメント中に相当のスペースが必要な新機能だったりするので、旧来のRPGのようなカラム指向の言語では制限が生じてしまうためです。 私たちが気に入っている例として、CHAINあるいはSETLLでキーを特定するためのKLISTを、フリーフォーマット独自の形で置き換える2つの方法があります。1つは私たちがほぼすべての場面で使っている、命令コードに続くカッコの中に、変数名あるいはリテラルや式の形でキー値を提供するというやり方です。%KDSという、KLISTとよく似ているけれどもずっと柔軟な組み込み関数もあります。 もう1つの例として、UPDATE命令の影響範囲になるフィールドサブセットを特定する関数である%Fieldsの使用をあげておきましょう。これは、O仕様書をEXCEPT命令と一緒に使うよりもずっと簡単です。4)コードを書くのと宣言を読むのが楽(特にファイルの)
正直言って、私たちはこれまでF仕様書が嫌いでした。各カラムの各文字が何を意味するのか、そしてどれが必要なのかを覚えておくことは苦痛で、手間のかかる作業です。Barbara Morris(IBMのRPGコンパイラー開発チームのリーダー)はかつて、F仕様書を読んだり書いたりするときには秘密の読解魔法が欲しくなると言っていました。ほとんどの場合、私たちはどのカラムにどの文字を入力すべきなのかを理解しようとするのではなく、F仕様書をどこか別のところからコピーして使っていたのです。しかしこの方法では、時として思いがけない結果が生じ、挙げ句の果てに長いデバッグ・セッションを経験することになります。コピーしたF仕様書に、私たちには必要のない、何らかの機能が指定されていたり、あるいは逆に必要なものが指定されていない場合があるためです。 でも、もうF仕様書のコピーなどしなくてもいいのです! 今では、どんなファイルに対しても、意味のある必要なキーワードを簡単に定義することができるからです。さらに素晴らしいことに、すべてのキーワードをコードする必要はありません。キーワード値に合理的なデフォルト値があるおかげで、ファイルが外部に記述されているとか、プリンターファイルは出力のみ、などといったことをわざわざ指定する必要はないのです。 キーワードのおかげで、フリーフォームのファイル宣言を読むのはずっと簡単です。ファイルとデータの宣言を混在させられる(つまり、最初にファイルを宣言しておく必要がない)ので、ファイル宣言に関連したデータ宣言の特定がずっと簡単になるのです。なぜなら、例えばデータをREADやCHAINしたりするのに使われているDSやファイルのINFDS(情報データ構造)の定義などを、コード中にひとまとめに書いておくことができるからです。5)RPGに新しいプログラマーを呼び込める
最後の理由ですが、だからといって重要度が低いというわけではありません。フリーフォーマットのコーディングにより、RPGは他の現代的なプログラミング言語と同じ土俵に立つことになりました。最新のプログラミング言語はすべてフリーフォーマットだからです。現在、あるいは今後システム開発の世界に参入してくる新しい開発者を呼び込むうえで、これは重要なことです。フリーフォーマット言語の世界では、旧来の固定長フォーマットRPGは単に奇妙なものとして映るため、RPGに対し、先進的なアプリケーションタスクには向かない古臭い言語という、不当な印象が持たれてしまいます。 しかしながら実のところRPGはパワフルで柔軟性のある言語です。興味さえ持ってもらえれば、若い開発者の多くがビジネスアプリケーション用の他の人気言語よりもRPGを好むようになるでしょう。ではRPGに興味を持ってもらうためにはどうすればよいのでしょうか。興味深いことに、RPGのようなビジネス指向言語の利点を理解した後であれば、古い固定長フォーマットコードを取り扱わせたとしても、ほとんどの人は問題を感じないということに私たちは気がつきました。これまでほとんどの場合、開発者たちはその真価を認識できるだけの時間をほとんど与えられないまま、この言語に引き合わせられてきたのです。 もしかしたら、RPG使いのあなたはこう考えているかもしれません。「新しい若い開発者たちがRPGに来たら、自分の仕事が脅かされるのでは?」私たちは複数のRPG開発会社の経営者と、使用言語を変更する可能性や、その過程でおそらくはIBM iからも引き上げる可能性について話をしたことがあります。それは単に、優れたRPG開発者を探すのがあまりにも難しく、また、見つかったとしても高くて雇えないからというのが理由でした。つまり、他の言語への移行を考えているのは、RPGで彼らのニーズが満たせないからではなく、エンジニアたちが退職年齢に近づいており、将来におけるアプリケーションの拡張や維持について懸念を持っているからなのです。結局のところ、RPGに新しい開発者を呼び込めなければ、あなたの仕事、そしてあなたのコード遺産に対し、より現実的な脅威が迫ってくることになるでしょう。 私たちは、RPG使いを探すのに苦労している開発会社に「RPGを使える人や経験者を探すのはやめなさい」とアドバイスしました。その代わり、どの言語でもいいのでビジネス指向に優れた開発者を探し、そして彼らにRPG(もちろんフリーフォーム形式で)とIBM iを教えることを勧めました。この問題に関して私たちの考えをもっと知りたいという方は、以下のブログの投稿をご覧ください。http://www.ibmsystemsmag.com/Blogs/iDevelop/Archive/Programming-Highs-and-Tire-Lows/