本節は、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)
名前の先頭にインタープロセス (<>) 記号を付けることによって、インタープロセス変数を表します。
注: このシンタックスはWindowsとMacintoshの両方で使用することができます。これに加えて、Macintoshに限り、ダイアモンド記号(Option-Shift-V)を使用することもできます。
インタープロセス変数名は、<> 記号を除いて最大255文字(*)以内で指定することができます。
(*) "メソッドをUnicodeで保存する"互換性オプションが選択されていない場合には、上限は31文字となります(互換性ページ参照)。
例題
<>vlProcessID:=Current process
<>vsKey:=Char(KeyCode)
If(<>vtName#"")
名前 (<>記号や$記号から始まらない) を使用して、プロセス変数を表します。プロセス変数は255(*)文字以内の文字で名前を指定します
(*) "メソッドをUnicodeとして保存する"オプションがチェックされていない場合には31文字以内で指定します(互換性ページ参照)。
例題
vrGrandTotal:=Sum([Accounts]Amount)
If(bValidate=1)
vsCurrentName:=""
ドル記号 ($) を名前の先頭につけてローカル変数を表します。ローカル変数名は、ドル記号($) を除いて255文字(*)まで指定することができます。
(*) "メソッドをUnicodeで保存する"オプションがチェックされていない場合には31文字以内で指定します(互換性ページ参照)。
例題
For($vlRecord;1;100)
If($vsTempVar="No")
$vsMyString:="Hello there"
名前を使用して、配列を表します。これは配列作成時に配列宣言コマンド (ARRAY LONGINT等) に渡す名前です。配列は変数であり、スコープに基づいて次の3種類があります:
インタープロセス配列
インタープロセス配列の名前は、名前の先頭にインタープロセス (<>) 記号が付きます。
注: このシンタックスはWindowsとMacintoshの両方で使用することができます。これに加えて、Macintoshに限り、ダイアモンド記号(Option-Shift-V)を使用することもできます。
インタープロセス配列名は、インタープロセス (<>) 記号を除いて255文字(*) 以内で指定します。
例題
ARRAY TEXT(<>atSubjects;Records in table([Topics]))
SORT ARRAY(<>asKeywords;>)
ARRAY INTEGER(<>aiBigArray;10000)
プロセス配列
(<>記号または$記号から始まらない) 名前を使用して、プロセス配列を表わします。プロセス配列名は255文字(*) 以内で指定します。
例題
ARRAY TEXT(atSubjects;Records in table([Topics]))
SORT ARRAY(asKeywords;>)
ARRAY INTEGER(aiBigArray;10000)
ローカル配列
配列名がドル記号 ($) で始まるものは、ローカル配列です。ローカル配列名は、ドル ($) 記号を除いて255文字(*) 以内で指定します。
例題
ARRAY TEXT($atSubjects;Records in table([Topics]))
SORT ARRAY($asKeywords;>)
ARRAY INTEGER($aiBigArray;10000)
(*) "メソッドをUnicodeで保存する"オプションがチェックされていない場合には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})
オブジェクト記法(参照)が有効化されているとき、ドット(.)をオブジェクト名(あるいは属性名)と属性の間に置くことでオブジェクト属性を指定します。属性名は255文字以内の文字列で指定し、また大文字と小文字を区別することに注意してください。
例題:
myObject.myAttribute:="10"
$value:=$clientObj.data.address.city
注 : オブジェクト属性名にはさらにルールが適用されます(オブジェクト属性はECMA Script の指定に沿う必要があります)。詳細については、オブジェクト記法の使用(プレビュー) を参照してください。
フォームの名前は文字列を使用して表します。フォーム名は31文字以内で指定します。
例題
FORM SET INPUT([People];"Input")
FORM SET OUTPUT([People];"Output")
DIALOG([Storage];"Note box"+String($vlStage))
文字列の名前の先頭に* 引数をつけてフォームオブジェクトを指定します。オブジェクト名には最大で255バイトまで含めることができます。
例題
OBJECT SET FONT(*;"Binfo";"Times")
オブジェクトプロパティの章も参照して下さい。
注: フォームオブジェクト(ボタン、リストボックス、入力可能な変数など)と4Dランゲージのオブジェクト型を混同しないようにしてください。4Dランゲージのオブジェクト型はオブジェクト記法と専用のコマンドを使用して作成し、管理されます(オブジェクト(ランゲージ)を参照してください)。
名前を使用して、メソッド (プロシージャおよび関数) を表します。メソッド名は31文字以内で指定します。
Note: 結果を返さないメソッドはプロシージャとも呼ばれます。結果を返すメソッドを関数と呼びます。
例題
If(New client)
DELETE DUPLICATED VALUES
APPLY TO SELECTION([Employees];INCREASE SALARIES)
Tip: 4Dの組み込みコマンドと同じ命名規約を利用することは良いプログラミングテクニックです。メソッド名には大文字を使用しますが、メソッドが関数の場合、 メソッド名の最初の文字だけを大文字にします。このように命名することにより、数ヶ月後に保守のためデータベースを再度開いたときに、エクスプローラウィ ンドウでその名前を見ただけで、メソッドが結果を返すかどうかがわかります。
Note: メソッドを呼び出すには、メソッド名を入力するだけです。しかしON EVENT CALL等4Dの組み込みコマンドの一部やプラグインコマンドは、引数のメソッド名を文字列 (ダブルクォートで括る) として渡すものがあります。
例題
QUERY BY FORMULA([aTable];Special query)
APPLY TO SELECTION([Employees];INCREASE SALARIES)
ON EVENT CALL("HANDLE EVENTS")
メソッドに引数を渡すことができます。引数はメソッド名の後のカッコ内に記述します。各引数は、セミコロン (;) で区切ります。引数は、呼び出されたメソッド内で、連番付きのローカル変数$1, $2,…, $nとして使用できます。さらに、複数の連続する引数は、${n}というシンタックスを用いて使用できます。nは数値で引数の番号を示します。
関数の戻り値は、ローカル変数$0に代入することで指定します。
例題
DROP SPACES(->[People]Name)
$vsResult:=Calc creator(1;5;"Nice")
vtClone:=Dump("is";"the";"it")
プラグインで定義された名前を使用して、プラグインコマンドを表します。プラグインコマンド名は31文字以内で指定します。
例題
$error:=SMTP_From($smtp_id;"henry@gmail.com")
スコープに基づき、2つのタイプのセットがあります:
4D Serverには以下もあります:
インタープロセスセット
インタープロセスセットの名前は、名前の先頭にインタープロセス (<>) 記号が付きます。インタプロセスセット名は、インタープロセス (<>) 記号を除いて255文字以内で指定します。
プロセスセット
セットの名前を表す文字列式を使用してプロセスセットを表します (<>記号も$記号も名前の先頭につきません) 。プロセスセット名は、255文字以内で指定します。
クライアントセット
クライアントセット名は、名前の先頭にドル ($) 記号を指定します。クライアントセット名は、ドル記号を除いて255文字以内で指定します。
Note: セットはサーバマシン上で保守されます。効率や特殊目的のために、クライアントマシン上でローカルにセットを使用したい場合があります。このような場合、クライアントセットを使用します。
例題
USE SET("<>Deleted Records")
CREATE SET([Customers];"<>Customer Orders")
If(Records in set("<>Selection"+String($i))>0)
USE SET("Deleted Records")
CREATE SET([Customers];"Customer Orders")
If(Records in set("Selection"+String($i))>0)
USE SET("$Deleted Records")
CREATE SET([Customers];"$Customer Orders")
If(Records in set("$Selection"+String($i))>0)
スコープに基づき、2つのタイプの命名セレクションがあります:
- インタープロセス命名セレクション
- プロセス命名セレクション
インタ-プロセス命名セレクション
インタープロセス命名セレクションの名前は、名前の先頭にインタープロセス (<>) 記号が付きます。インタプロセス命名セレクション名は、インタープロセス (<>) 記号を除いて255文字以内で指定します。
プロセス命名セレクション
プロセス命名セレクションの名前を表す文字列式を使用してプロセスセットを表します (<>記号も$記号も名前の先頭につきません) 。インタプロセスセット名は255文字以内で指定します。
例題
USE NAMED SELECTION([Customers];"<>ByZipcode")
USE NAMED SELECTION([Customers];"ByZipcode")
シングルユーザ版およびクライアント/サーバ版のクライアント側において、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 |
インタープロセス変数/テーブル | <> + 255(*) | <>vlNextProcessID |
プロセス変数/テーブル | 255(*) | vsCurrentName |
ローカル変数/テーブル | $ + 255(*) | $vlLocalCounter |
オブジェクト属性 | 255 | $o.myAttribute |
フォーム | 31 | "My Custom Web Input" |
フォームオブジェクト | 255 | "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" |
(*) "メソッドをUnicodeとして保存する"互換性オプションがチェックされていない場合には31文字まで(互換性ページ参照)。
注: 非ローマ文字(日本語など)が識別子に使用された場合、その最大長は短かくなることがあります。
データベース内の異なる要素に対しては、重複しない名前を使用するようにしてください。特定のオブジェクトが別タイプのオブジェクトと同じ名前を持つ場合 (例えばフィールドがPersonという名前で、変数もPersonという名前の場合) に、4Dはオブジェクトを識別するために優先順位システムを使用します。
4Dは、メソッドで使用される名前を次の順位で識別します:
- フィールド
- コマンド
- メソッド
- プラグインメソッド
- 定義済み定数
- 変数
例えば4DにはDateという組み込み関数があります。メソッドにDateという名前を付けても、4Dは組み込み関数のDate として認識し、メソッドとしては認識しません。つまり、そのメソッドの呼び出しはできないということです。しかしフィールドにDateと命名すると、4DはDate 関数の代わりにフィールドとして使用します。