メインコンテンツまでスキップ
バージョン: 開発中

EXECUTE FORMULA

EXECUTE FORMULA ( statement )

引数説明
statementText実行するコード

説明

EXECUTE FORMULAstatementをコードとして実行します。このコマンドはユーザーがビルド・変更可能な式を評価する場合に使用することを想定して設計されています。

ステートメントの文字列は必ず1行だけです。statement に空の文字列を指定した場合、EXECUTE FORMULAコマンドは何も行いません。statement が一行のメソッドとして実行されるかぎり、それは正しく実行される、というのが大原則です。EXECUTE FORMULA は実行速度を低下させるので、代替え手段として利用します。コンパイル済みデータベースにおいても、そのコードはコンパイルされていません。つまりstatementは実行されますが、コンパイル時にコンパイラによるチェックはされません。

注: コンパイル済みモードでのフォーミュラの実行はキャッシュを使用する事によって最適化することができます(以下のコンパイル済みモードでのフォーミュラのキャッシュを参照して下さい)。

statement には以下をの要素を含めることができます:

  • ファンクション(値を返すプロジェクトメソッド)の呼び出し
  • 4D コマンドの呼び出し
  • 代入

注:

  • statement がプロジェクトメソッドである場合、引数を渡すことのできるEXECUTE METHOD を使用することが推奨されます。
  • statement 内にて、例えばC_DATE のような、変数の宣言コマンドを呼び出すことは推奨されていません。コード内で衝突を起こす可能性があるためです。

フォーミュラにはプロセス変数とインタープロセス変数を含めることができます。しかしstatementは1行でなければならないため、(If, While, などの) フローコントロールを含めることはできません。

使用する4Dの言語やバージョンやに関わらず、statement が正常に評価されると言う事を保証するためには、異なるバージョン間において名前が変化する可能性のある要素(コマンド、テーブル、フィールド、定数)に対してはトークンシンタックスを使用する事が推奨されます。例えば、Current timeコマンドを挿入するためには'Current time:C178'と入力します。この点についてのより詳細な情報については、フォーミュラ内でのトークンの使用を参照して下さい。

コンパイル済みモードでのフォーミュラのキャッシュ

最適化のために、EXECUTE FORMULAによってコンパイル済みモードで実行されたそれぞれのフォーミュラは、メモリ内の専用のキャッシュに保存する事が可能です。フォーミュラはトークナイズドされた形でキャッシュされます。一度キャッシュに保存されると、その後の実行はトークン化のステップをスキップするため、大幅に最適化されます。

キャッシュサイズはデフォルトではゼロです(キャッシュなし)。SET DATABASE PARAMETERコマンドを使用してキャッシュを作成または調整する必要があります。例えば:

 SET DATABASE PARAMETER(Number of formulas in cache;0) //フォーミュラのキャッシュはなし
 SET DATABASE PARAMETER(Number of formulas in cache;3) //それぞれのプロセスにおいてフォーミュラを3つまでキャッシュ可能

EXECUTE FORMULAコマンドは、コンパイルされたデータベースあるいはコンポーネントから呼び出されたときのみキャッシュを使用します。

例題

4Dコマンドとテーブルへの呼び出しを含むフォーミュラを実行したい場合を考えます。これらの要素は改名されている可能性があるため、以下のようにトークンシンタックスを使用する事によって、アプリケーションの将来のバージョンにおいても正常な実行を保証する事ができます:

 EXECUTE FORMULA("Year of:C25 ([Products:5]Creation_Date:2])+$add")

参照

Command name
EDIT FORMULA
SET DATABASE PARAMETER