この節では変数の型を指定する方法、および変数のスコープとライフサイクル、プログラミングの基礎について説明します。
前のビデオでは vNumRecords のような変数を説明なく使用していました。ここでは変数についてもっと詳しく、型に応じてどのように動作するのか、スコープ毎の利用方法について説明します。
4Dの動作を、会社がどのように運営されているかに例えると、以下のように言い換えることができます:
- 会社には複数の部署があり、部署毎に特定のタスクを実行します。しばしばそれらは他の部署から独立しています。
- 各部署は特定の順番で決められた数のタスクを実行するよう定められています。
- 他の処理を行う必要があるため、あるタスクの実行が一時停止されることがあります。
- この新しい処理はそれ自身が持つ情報に加え、今まで行っていた処理の情報も使用するかもしれません。
このたとえを実際の例に当てはめてみると:
- ある会社に生産部、営業部、そして人事部があります。
- 人事部は他の部署の労働時間を集計し、給与の支払い、休日日数のカウント等を行います。
- 給与計算を行うためには超過勤務手当率やさまざまな手当、税率についても知っていなければなりません。これらの情報は法務部門よりもたらされます。
さてこの話を4Dに適用してみましょう:
- 4Dは同時に複数のプロセス (印刷、複数テーブルの内容表示、ツールパレット処理、読み込み、Webサーバー、Webサービスリクエストへの応答等) を処理できます。
- 各プロセスで実行されるメソッドは異なる複数のフェーズを含むことができます。
- メソッドは自身が実行されているプロセス内で他のプロセスを呼び出すことができます (同じ部署の同僚のように)。または他のプロセスの情報を要求することもできます (他の部署の同僚)。
各々のケースで、適切な変数を選択することができます:
- すべてのプロセスから読み書き可能な変数が必要な場合、インタープロセス変数を使用します。4Dでインタープロセス変数を宣言するためには、変数名を <> 記号で開始します。
(例: <>CurrentDate, <>RateTimeTable, 等) - メソッドを実行中、そのメソッド内のみで参照する変数が必要な場合、ローカル変数を使用します。4Dでローカル変数を宣言するためには、変数名を $ 記号で開始します。
(例: $Counter, $StampZone, 等) - 特別な記号で始まらないその他すべての変数はプロセス変数と呼ばれ、同じプロセス内の複数のメソッドから使用されます。
(例: vNumRecords, 等)
前述の例では、法務部から情報を得るためにプロセス間通信を行う必要があります。
4Dでは同じマシンの異なるプロセス間、さらにはクライアントマシンのプロセスからサーバーマシンのプロセス間で、GET PROCESS VARIABLEやSET PROCESS VARIABLEを使用したプロセス変数の読み書きがサポートされています。
日常生活に基づいた他の例を見てみましょう:
- ローカル変数は学生のノートです。その学生だけが自分のノートを読み書きできます。
- プロセス変数は黒板です。黒板は同じ教室内のすべての生徒が読み書きできます。
- インタープロセス変数は学校の入口にある掲示板です。クラスに関わらず学校の生徒全員が見られます。
プロセス間通信は、ある教師が自分のクラスでない黒板 (プロセス変数) に読み書きを行う場合に発生します。
これが変数のスコープです。これらがどのように動作するか見てみましょう。
4Dには二種類の変数があります:
- 通常の変数 (ひとつの値を保持)
- 配列 (同じ型の複数の値を保持)
通常の変数には、フィールドと同じ型 (テキスト、倍長整数、日付、時間、BLOB等) およびポインター型があります。
配列にも (BLOBと時間型を除き) 同じ型があります。
変数のライフサイクルは以下の通りです:
例題でこのことを確認してみましょう:
変数の名前を決定する際には、一貫性を持たせた命名規則を先に決定し、プロジェクト全体でその規則に従うべきです。
読みやすく、役割を理解しやすい名前を付けるべきです。後で名称を変更したくなった時は、グローバルな名称変更機能を使用できます。
他の言語と同様、変数は4Dにとって不可欠です。必要な時には遠慮なく使用してください。
以下の変数は言語上存在しても、フォームには表示できない点に留意してください: