本節は、4D言語のさまざまなオブジェクトを命名するための規則を説明します。すべてのオブジェクトの名前は、次の規則に従います:
- 名前は半角アルファベットまたはアンダースコアー (_)文字で始めます。
- その後、名前には半角アルファベット文字、数字、スペース、アンダースコアを使用できます。
- ピリオド (.)、スラッシュ (/)、クォーテーションマーク (')、コロン (:) は使用できません。
- +や*等、演算子に用いられる文字は使用できません。
- 名前の最後につけたスペースは無視されます。
Note: オブジェクトがSQLで処理される場合には、追加のルールに従う必要があります。文字 _0123456789abcdefghijklmnopqrstuvwxyz のみを使用できます。また、名前にはコマンドや属性などのSQLキーワードを含めることができません。ストラクチャエディタのインスペクタ下部にある"SQL"エリアには、テーブル名やフィールド名として許可されない文字があると警告が表示されます。
角カッコ内 ([...]) に名前を入れると、テーブルを表します。テーブル名は、31文字以内で指定します。
例題
DEFAULT TABLE([Orders])
FORM SET INPUT([Clients];"Entry")
ADD RECORD([Letters])
フィールドが属するテーブルを最初に指定することで、フィールドを表します。フィールドの名前はテーブル名のすぐ後に続けます。フィールド名は31文字以内で指定します。
例題
[Orders]Total:=Sum([Line]Amount)
QUERY([Clients];[Clients]Name="Smith")
[Letters]Text:=Capitalize text([Letters]Text)
名前の先頭にインタープロセス (<>) 記号を付けることによって、インタープロセス変数を表します。インタープロセス変数名は、インタープロセス (<>) 記号を除いて31文字以内で指定します。
例題
名前 (<>記号や$記号から始まらない) を使用して、プロセス変数を表します。プロセス変数名は、31文字以内で指定します。
例題
vrGrandTotal:=Sum([Accounts]Amount)
If(bValidate=1)
vsCurrentName:=""
ドル記号 ($) を名前の先頭につけてローカル変数を表します。ローカル変数名は、ドル ($) 記号を除いて31文字以内で指定します。
例題
For($vlRecord;1;100)
If($vsTempVar="No")
$vsMyString:="Hello there"
名前を使用して、配列を表します。これは配列作成時に配列宣言コマンド (ARRAY LONGINT等) に渡す名前です。配列は変数であり、スコープに基づいて次の3種類があります:
インタープロセス配列
インタープロセス配列の名前は、名前の先頭にインタープロセス (<>) 記号が付きます。インタープロセス配列名は、インタープロセス (<>) 記号を除いて31文字以内で指定します。
例題
プロセス配列
(<>記号または$記号から始まらない) 名前を使用して、プロセス配列を表わします。プロセス配列名は31文字以内で指定します。
例題
ローカル配列
配列名がドル記号 ($) で始まるものは、ローカル配列です。ローカル配列名は、ドル ($) 記号を除いて31文字以内で指定します。
例題
配列の要素
中カッコ ({…}) を使用して、インタープロセス配列、プロセス配列、ローカル配列の要素を参照します。参照される配列要素は数式で表されます。
例題
If(<>asKeywords{1}="Stop")
<>atSubjects{$vlElem}:=[Topics]Subject
$viNextValue:=<>aiBigArray{Size of array(<>aiBigArray)}
If(asKeywords{1}="Stop")
atSubjects{$vlElem}:=[Topics]Subject
$viNextValue:=aiBigArray{Size of array(aiBigArray)}
If($asKeywords{1}="Stop")
$atSubjects{$vlElem}:=[Topics]Subject
$viNextValue:=$aiBigArray{Size of array($aiBigArray)}
二次元配列の要素
中カッコ ({…}) を2回使用して、2次元配列の要素を参照します。参照される要素は2組の中カッコ内の2つの数式で表されます。
例題
If(<>asKeywords{$vlNextRow}{1}="Stop")
<>atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=<>aiBigArray{$vlSet}{Size of array(<>aiBigArray{$vlSet})}
If(asKeywords{$vlNextRow}{1}="Stop")
atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})}
If($asKeywords{$vlNextRow}{1}="Stop")
$atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=$aiBigArray{$vlSet}{Size of array($aiBigArray{$vlSet})}
フォームの名前は文字列を使用して表します。フォーム名は31文字以内で指定します。
例題
名前を使用して、メソッド (プロシージャおよび関数) を表します。メソッド名は31文字以内で指定します。
Note: 結果を返さないメソッドはプロシージャとも呼ばれます。結果を返すメソッドを関数と呼びます。
例題
Tip: 4Dの組み込みコマンドと同じ命名規約を利用することは良いプログラミングテクニックです。メソッド名には大文字を使用しますが、メソッドが関数の場合、 メソッド名の最初の文字だけを大文字にします。このように命名することにより、数ヶ月後に保守のためデータベースを再度開いたときに、エクスプローラウィ ンドウでその名前を見ただけで、メソッドが結果を返すかどうかがわかります。
Note: メソッドを呼び出すには、メソッド名を入力するだけです。しかしON EVENT CALL等4Dの組み込みコマンドの一部やプラグインコマンドは、引数のメソッド名を文字列 (ダブルクォートで括る) として渡すものがあります。
例題
メソッドに引数を渡すことができます。引数はメソッド名の後のカッコ内に記述します。各引数は、セミコロン (;) で区切ります。引数は、呼び出されたメソッド内で、連番付きのローカル変数$1, $2,…, $nとして使用できます。さらに、複数の連続する引数は、${n}というシンタックスを用いて使用できます。nは数値で引数の番号を示します。
関数の戻り値は、ローカル変数$0に代入することで指定します。
例題
DROP SPACES(->[People]Name)
$vsResult:=Calc creator(1;5;"Nice")
vtClone:=Dump("is";"the";"it")
プラグインで定義された名前を使用して、プラグインコマンドを表します。プラグインコマンド名は31文字以内で指定します。
例題
スコープに基づき、2つのタイプのセットがあります:
4D Serverには以下もあります:
インタープロセスセット
インタープロセスセットの名前は、名前の先頭にインタープロセス (<>) 記号が付きます。インタプロセスセット名は、インタープロセス (<>) 記号を除いて255文字以内で指定します。
プロセスセット
セットの名前を表す文字列式を使用してプロセスセットを表します (<>記号も$記号も名前の先頭につきません) 。プロセスセット名は、255文字以内で指定します。
クライアントセット
クライアントセット名は、名前の先頭にドル ($) 記号を指定します。クライアントセット名は、ドル記号を除いて255文字以内で指定します。
Note: セットはサーバマシン上で保守されます。効率や特殊目的のために、クライアントマシン上でローカルにセットを使用したい場合があります。このような場合、クライアントセットを使用します。
例題
スコープに基づき、2つのタイプの命名セレクションがあります:
- インタープロセス命名セレクション
- プロセス命名セレクション
インタ-プロセス命名セレクション
インタープロセス命名セレクションの名前は、名前の先頭にインタープロセス (<>) 記号が付きます。インタプロセス命名セレクション名は、インタープロセス (<>) 記号を除いて255文字以内で指定します。
プロセス命名セレクション
プロセス命名セレクションの名前を表す文字列式を使用してプロセスセットを表します (<>記号も$記号も名前の先頭につきません) 。インタプロセスセット名は255文字以内で指定します。
例題
シングルユーザ版およびクライアント/サーバ版のクライアント側において、2種類のプロセスがあります:
グロ-バルプロセス
文字列 ($記号以外から始まる) を使用してグローバルプロセスの名前を表します。グローバルプロセス名は、255文字以内で指定します。
ローカルプロセス
名前の前にドル記号 ($) をつけてローカルプロセスを表します。ローカルプロセス名は、ドル ($) 記号を除いて255文字以内で指定します。
例題
$vlProcessID:=New process("P_ADD_CUSTOMERS";48*1024;"Add Customers")
$vlProcessID:=New process("P_MOUSE_SNIFFER";16*1024;"$Follow Mouse Moves")
次の表は、4Dの命名規則についてまとめています。
タイプ | 最大長 | 例 |
テーブル | 31 | [Invoices] |
フィールド | 31 | [Employees]Last Name |
インタープロセス変数 | <> + 31 | <>vlNextProcessID |
プロセス変数 | 31 | vsCurrentName |
ローカル変数 | $ + 31 | $vlLocalCounter |
フォーム | 31 | "My Custom Web Input" |
フォームオブジェクト | 31 | "MyButton" |
インタープロセス配列 | <> + 31 | <>apTables |
プロセス配列 | 31 | asGender |
ローカル配列 | $ + 31 | $atValues |
メソッド | 31 | M_ADD_CUSTOMERS |
プラグインメソッド | 31 | WR INSERT TEXT |
インタープロセスセット | <> + 255 | "<>Records to be Archived" |
プロセスセット | 255 | "Current selected records" |
クライアントセット | $ + 255 | "$Previous Subjects" |
命名セレクション | 255 | "Employees A to Z" |
インタープロセス命名セレクション | <> + 255 | "<>Employees Z to A" |
ローカルプロセス | $ + 255 | "$Follow Events" |
グローバルプロセス | 255 | "P_INVOICES_MODULE" |
セマフォ | 255 | "mysemaphore" |
特定のオブジェクトが別タイプのオブジェクトと同じ名前を持つ場合 (例えばフィールドがPersonという名前で、変数もPersonという名前の場合) に、4Dはオブジェクトを識別するために優先順位システムを使用します。重複しない名前の使用に関しては開発者自身に委ねられます。
4Dは、メソッドで使用される名前を次の順位で識別します:
- フィールド
- コマンド
- メソッド
- プラグインメソッド
- 定義済み定数
- 変数
例えば4DにはDateという組み込み関数があります。メソッドにDateという名前を付けても、4Dは組み込み関数のDateとして認識し、メソッドとしては認識しません。つまり、そのメソッドの呼び出しはできないということです。しかしフィールドにDateと命名すると、4DはDate関数の代わりにフィールドとして使用します。