Tips

静的変数を効果的に管理する

日付2011/03/11
ID76239 (英語原文参照)
バージョンv12
プラットフォームMac/Win

元来, 4Dの言語には, 静的変数に該当する概念が存在しません。静的変数のスコープは, それが定義されたモジュールあるいは関数に限定されていますが, 静的変数自体はプログラムが実行されている間は存在しているのが特徴です。ある関数の中で定義された静的変数は, その関数の外からアクセスできませんが(スコープの外であるため), メモリにはその静的変数が引き続き存在しています。次にその関数が呼ばれたとき, 静的変数は, 他の変数のように新しいメモリが割り当てられる代わりに, 以前のメモリと値が流用されることになります。毎回, メモリが確保・解放されるローカル変数とは対照的です。

そのような仕組みに近いことは, 4Dのアプリケーションプロセスを活用することにより, 再現することができます。アプリケーションプロセスはアプリケーションが開始してから終了するまで常に存在し, そのプロセス変数は常にメモリに存在しているからです。アプリケーションプロセスには次のような特徴があります。

  • アプリケーションプロセスは決してアボートされない
  • アプリケーションプロセスのプロセス番号は1である
  • このような知識は, ときにたいへん効率的なプログラムの作成に役立てることができます。

    たとえば, 定数というよりは静的な値で, アプリケーション全体にわたって参照されるものは, 毎回, プロセスを起動するたびに初期化する代わりに, アプリケーションプロセスのプロセス変数から読み取るという方法で管理することができます。典型的な例として税率を挙げるならば, On Startupメソッドでプロセス変数に値を代入し, 以後, 他のプロセスはGET PROCESS VARIABLEコマンドでその値をローカル変数に代入する, といった具合です。もちろん, 反対にSET PROCESS VARIABLEコマンドでこの値を書き換えることもできます。いずれにしても, アプリケーションプロセスのプロセス変数を読み書きする行為は, 専用のプロジェクトメソッドで一元的に管理します。

    同じようなものにインタープロセス変数が挙げられますが, 変数を直接書き換える場合とは違い, 常駐するアプリケーションプロセスのプロセス変数を専用のプロジェクトメソッドで読み書きするというモデルでは, 読み書きのアクセス権を管理できるメリットがあります。プロジェクトメソッドは, 特定のグループにアクセス権を限定することができるからです。