グローバル変数は便利だけど・・・
今回はグローバル変数の制御について書いてみたいと思います。
弊社のシステム開発標準では、スクリプト内やフィールド定義、条件付き書式等の計算式を定義できる場所にグローバル変数をハードコーディングしてはいけないルールになっています。
ではどの様に制御しているか・・・
方法としては、タイトルにもある通り1つのグローバル変数に対して、1つのカスタム関数を作成し、その関数を通して1箇所で制御するようにしています。
グローバル変数をカスタム関数で制御する理由:
・グローバル変数は便利だけど、スコープが広いのでどこで何のために使っているかを把握するのが難しい。
・変数の中身をどう制御しているのかが様々な場所に散在してしまい使用目的が不明確になりやすい。
・スペルミスによるバグの発生源になってしまう。
この方法で解決される問題
・DDRから使用場所の特定が容易になる。
・変数への値のセット、及び読み出しを関数化することにより使用目的を明確化することができる。
・スペルミス等による開発効率の低下を防ぐことができる。
具体例
VitualList(後述)で使うID値の改行区切りデータをコントロール
上記の例は、$$virtualList.hogeIDsというグローバル変数を、カスタム関数を通して制御している例です。
引数は、method、value、indexの3つ。
1つ目の引数である、methodはグローバル変数をどう制御するかの命令みたいなものです。
上記の例だとInitialize/Set/Get/GetAll/IsExist/Countがメソッドにあたります。
メソッドの内容をCase関数で分岐させ、必要に応じて受け取った引数を使いながらメソッドに対応した値を返す計算式を記述しています。
記述している計算式そのものはご覧のとおり極めて単純なものなので特別な説明は不要かと思います。パッと見て頂いてもお分かりの通り、それほど高度で難解なテクニックを使っているってことはないですよね。
しかし、このようにグローバル変数の制御を一箇所に集めることによって、計り知れないメリットがあります。
まずカスタム関数の使用箇所は、グローバル変数と異なりデータベースデザインレポート(DDR)からメカ的に参照することができます。これは調査したいグローバル変数が、「何処から」「どのように」使われているかが瞬時にわかるということです。
次にグローバル変数を読み書きするロジックをカスタム関数内にカプセル化(?)することで、変数の中身を無秩序に書き換えられてしまうのを防ぐことができます。
最後にグローバル変数のスペルミスによる開発効率の低下を防ぐことができます。FileMakerの計算式エディタには変数の補助入力機能が無く、また変数の宣言と値の制御も区別がありません。この仕様により、変数の記述ミスでデバッグに予想以上の時間がかかってしまうといったことが発生しやすいのですが、変数名の記述を一箇所に集めることで思わぬミスを防ぐことができます。
ちなみにLet関数の変数定義部には、グローバル変数とローカル変数も書くことができます。このことはヘルプにも書いてあるのですが、意外と知られていない(?)ですよね。私も先人たちのサンプルを解析していくなかで初めて気が付きました。
最後にもうひとつ。
先に上げたカスタム関数の例だと、メソッド名もカスタム関数に「定数化」して使っています。よく使う値はカスタム関数に定数化しておくと、ハードコーディングを防ぐことができるので、これもちょっとした開発Tipsですね。
最後に・・・
具体例としてあげているVirtualListとは、グローバル変数にプライマリキーを改行区切りでセットしてゴニョゴニョするテクニックです。これを覚えると、FileMakerではなかなか難しいSQLのユニオンクエリのような結果を取得したり、テーブルオカレンスに依存しない抽象的なロジックを実装できたりと、ハイレベルなソリューション開発には必須のテクニックです。
その内容を説明しようと思ったら相当数の文量や具体的なサンプルソリューションが必要になるので、また別の機会に書くとして、今回は参考のURLのみご紹介させていただきます。
■巨匠:Sevens Door さんの FileMaker Fun Night のレポート記事:Virtual List がクールな理由
http://web.sevensdoor.com/events_browse.xsl?report=105
※「FileMaker Virtual List」 で Google先生にたずねていると、英語の情報はかなりたくさん出てきます。
そして、いつもどおり巧妙な宣伝を。
弊社では今、これからFileMakerを核としたiOSデバイスで稼働するビジネスソリューション開発への参入を検討されているSIer・ソフトウェアハウス様、及び社内システム内製化の開発プラットフォームとしてFileMakerをご検討されている企業様への技術コンサルティングサービスをご提供しております。
「はやい・うまい・やすい」の三拍子揃ったFileMakerですが、私自身、他の開発言語からFileMakerに流れてきて、本当に手足のようにFileMakerが使えるようになったのは、本格的に開発を始めてから3年程度を要しました。その間、踏まなくてもよい地雷を沢山踏んでしまい、落ちなくても良い落とし穴に随分落ちたものです・・・
こういったハマる必要のないワナにハマること無く、スムーズにFileMakerの開発技術をキャッチアップし、更にはプロジェクト全体の伴走者として、企画・開発から、運用・保守フェーズに至るまでの細かなテクニックとノウハウを出し惜しみなしで全てご提供させていただく・・・
そういったサービスになります。
ぜひお気軽にお問い合わせください。
Happy FileMaking!