4D v16.3

コンパイラコマンド

ホーム

 
4D v16.3
コンパイラコマンド

コンパイラコマンド  


 

 

統合された4Dのコンパイラは、データベースアプリケーションを機械語レベルに翻訳します。コンパイラの利点は次の通りです:

  • 速度: データベースの実行速度を3倍から1000倍速くします。
  • コードの検証: データベースアプリケーションコードの整合性をチェックし、論理的矛盾や構文的矛盾を検出します。
  • 保護: データベースをコンパイルすると、インタプリタコードを削除できます。コンパイルされたデータベースは、故意的にも不注意からもストラクチャやメソッドの表示や修正することができないこと以外は、オリジナルのデータベースと同じに動作します。
  • スタンドアロンのダブルクリックで起動するアプリケーション: コンパイル後のデータベースは、独自のアイコンを持つスタンドアロンアプリケーション(.EXEファイル)に作り変えることもできます。
  • プリエンプティブモードでの実行: コンパイル済みのコードのみプリエンプティブプロセスで実行可能です。

コンパイラの操作については、Design Referenceマニュアルを参照してください。

このテーマのコマンドは、コンパイラの使用に関連があります。これらのコマンドは、データベース中のデータタイプを定義します。IDLEコマンドは、コンパイルされたデータベースで特別に使用されるコマンドです。

C_BLOBC_REALC_TEXT
C_BOOLEANC_LONGINTC_DATE
C_POINTERC_PICTUREC_TIME
C_OBJECTIDLE

互換性に関する注意: 廃止予定のコマンド_o_C_GRAPH_o_C_INTEGER_o_C_STRING は今後使用されるべきではありません。

IDLE コマンド以外のこれらのコマンドは、変数を宣言し、それらを指定したデータタイプとしてキャストします。変数を宣言することによって、変数のデータタイプに 関連する曖昧さが解決されます。変数がこれらのコマンドのいずれかで宣言されていない場合には、コンパイラが変数のデータタイプを判断しようとします。 フォームで使用される変数のデータタイプは、多くの場合、コンパイラで判断するのは困難です。このため、開発者がこれらのコマンドによってフォームで使用 される変数を宣言することが特に重要です。

: 時間を節約するために、コンパイラウインドウにあるオプションを使用し、(コンパイラメソッドと呼ばれる) 変数定義メソッドの生成や更新を行うことができます。このオプションは、データベース内で使用されるすべての変数のタイプ指定を行う変数定義メソッドを自 動作成します。

配列は変数で、コンパイルについては標準変数と同じ規則に従わなければなりません。配列の宣言命令は配列テーマ内にまとめられています。

  • 同じ名前を2つ以上のメソッドまたは変数に付けてはなりません。また、メソッドに変数と同じ名前をつけることはできません。
  • バー ジョン1の4Dで使用されていた変数の間接参照はできません。パーセント記号(%)を使って間接的に変数を参照する文字型間接参照も、中カッコ ({...})を用いる数値型間接参照も実行することはできません。中カッコ({...})は定義された配列の要素を指定する場合にのみ使用されます。し かし、引数に対する間接参照は使用できます。
  • 変数や配列のデータタイプは変更できません。
  • 1次元配列を2次元配列に、また2次元配列を1次元配列に変更することはできません。
  • 文字(列)変数の長さや、文字列配列の要素の長さは変えられません。
  • コンパイラにより変数のタイプ定義は行われますが、フォーム上の変数のように、データタイプが明確でない場合は、コンパイラ命令を使用して変数のデータタイプを指定するべきです。
  • 変数を明示的にタイプ宣言するもう1つの理由は、コードの最適化です。このことは、特にカウンタとして使用される変数に対して当てはまります。最大限の能力を得るために、可能な限り倍長整数型の変数を使用してください。
  • 変数をクリアする(各変数の初期値に設定する) には、変数名を用いてCLEAR VARIABLEコマンドを使用します。CLEAR VARIABLEコマンド内で変数の名前を表わす文字列を使用してはいけません。
  • Undefined関数は、常にFalseを返します。変数は常に定義されています。
  • 通常、倍長整数変数および整数変数の数値演算は、デフォルトの数値タイプ(実数)の演算よりもはるかに高速に実行されます。
  • メソッドの"プリエンプティブプロセスで実行可能"プロパティにチェックを入れていた場合、コードは他のスレッドアンセーフなコマンドや他のスレッドアンセーフなメソッドを呼び出してはいけません。

これらの規則については、下記の節を参照してください:

以下の例は、コンパイラ用の基本的な変数宣言です:

 C_BLOB(vxMyBlob// プロセス変数vxMyBlobはBLOB型の変数として宣言されます
 C_BOOLEAN(<>OnWindows// インタープロセス変数<>OnWindowsはブール型の変数として宣言されます
 C_DATE($vdCurDate// ローカル変数$vdCurDateは日付型の変数として宣言されます
 C_LONGINT(vg1;vg2;vg3// 3つのプロセス変数vg1、vg2そしてvg3は倍長整数型の変数として宣言されます

以下の例は、プロジェクトメソッドOneMethodAmongOthersにて、3つの引数を宣言しています:
 

  // OneMethodAmongOthers プロジェクトメソッド
  // OneMethodAmongOthers ( Real ; Integer { ; Long } )
  // OneMethodAmongOthers ( Amount ; Percentage { ; Ratio } )
 
 C_REAL($1// 1番目の引数は実数
 C_INTEGER($2// 2番目の引数は整数
 C_LONGINT($3// 3番目の引数は倍長整数
 
  ` ...

以下のCapitalize プロジェクトメソッドは、テキストの引数を受けとり、テキストの結果を返します:

  // Capitalize プロジェクトメソッド
 <p> // Capitalize ( Text ) -> Text
  // Capitalize ( Source string ) -> Capitalized string
 
 C_TEXT($0;$1)
 $0:=Uppercase(Substring($1;1;1))+Lowercase(Substring($1;2))

以下のプロジェクトメソッドSEND PACKETSは、引数として時間と、可変の数のテキスト引数を受け取ります:

  ` SEND PACKETS プロジェクトメソッド
  ` SEND PACKETS ( Time ; Text { ; Text2... ; TextN } )
  ` SEND PACKETS ( docRef ; Data { ; Data2... ; DataN } )
 
 C_TIME($1)
 C_TEXT(${2})
 C_LONGINT($vlPacket)
 
 For($vlPacket;2;Count parameters)
    SEND PACKET($1;${$vlPacket})
 End for

以下の例において、プロジェクトメソッドCOMPILER_Param_Predeclare28 は、コンパイル用に他のプロジェクトメソッドのシンタックスを事前に宣言しています:

  // COMPILER_Param_Predeclare28 プロジェクトメソッド
 
 C_REAL(OneMethodAmongOthers;$1// OneMethodAmongOthers ( Real ; Integer { ; Long } )
 C_DATE(OneMethodAmongOthers;$2` ...
 C_LONGINT(OneMethodAmongOthers;$3` ...
 C_TEXT(Capitalize;255;$0;$1// Capitalize ( String ) -> String
 C_TIME(SEND PACKETS;$1// SEND PACKETS ( Time ; Text { ; Text2... ; TextN } )
 C_TEXT(SEND PACKETS;${2}) ` ...



参照 

_o_C_GRAPH
_o_C_INTEGER
_o_C_STRING
C_BLOB
C_BOOLEAN
C_DATE
C_LONGINT
C_PICTURE
C_POINTER
C_REAL
C_TEXT
C_TIME
IDLE

 
プロパティ 

プロダクト: 4D
テーマ: コンパイラ

 
履歴 

変更: 4D v15 R5

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)