version 11 (Modified)
本節は、4D言語のさまざまなオブジェクトを命名するための規則を説明します。すべてのオブジェクトの名前は、次の規則に従います:
・名前は半角アルファベット文字で始めます。
・その後、名前には半角アルファベット文字、数字、スペース、アンダースコアを使用できます。
・ピリオド (.)、スラッシュ (/)、クォーテーションマーク (')、コロン (:) は使用できません。
・+や*等、演算子に用いられる文字は使用できません。
・名前の最後につけたスペースは無視されます。
Note: オブジェクトがSQLで処理される場合には、追加のルールに従う必要があります。文字 _0123456789abcdefghijklmnopqrstuvwxyz のみを使用できます。また、名前にはコマンドや属性などのSQLキーワードを含めることができません。ストラクチャエディタのインスペクタ下部にある"SQL"エリアには、テーブル名やフィールド名として許可されない文字があると警告が表示されます。
テーブル
角カッコ内 ([...]) に名前を入れると、テーブルを表します。テーブル名は、31文字以内で指定します。
例題
DEFAULT TABLE ([Orders]) INPUT FORM ([Clients]; "Entry") ADD RECORD ([Letters])
フィールド
フィールドが属するテーブルを最初に指定することで、フィールドを表します。フィールドの名前はテーブル名のすぐ後に続けます。フィールド名は31文字以内で指定します。
フィールド名の先頭文字にアンダースコア (_) を使用してはいけません。このアンダースコア文字はプラグインに予約されています。4Dはメソッドエディタ内で、フィールドの先頭でこの文字を見つけると、アンダースコアを取り除きます。
例題
[Orders]Total:=Sum([Line]Amount) QUERY([Clients];[Clients]Name="Smith") [Letters]Text:=Capitalize text ([Letters]Text)
インタープロセス変数
名前の先頭にインタープロセス (<>) 記号を付けることによって、インタープロセス変数を表します。インタープロセス変数名は、インタープロセス (<>) 記号を除いて31バイト以内で指定します。
例題
<>vlProcessID:=Current process <>vsKey:=Char(KeyCode) If (<>vtName#"")
プロセス変数
名前 (<>記号や$記号から始まらない) を使用して、プロセス変数を表します。プロセス変数名は、31バイト以内で指定します。
例題
<>vrGrandTotal:=Sum([Accounts]Amount) If (bValidate=1) vsCurrentName:=""
ローカル変数
ドル記号 ($) を名前の先頭につけてローカル変数を表します。ローカル変数名は、ドル ($) 記号を除いて31バイト以内で指定します。
例題
For ($vlRecord; 1; 100) If ($vsTempVar="No") $vsMyString:="Hello there"
配列
名前を使用して、配列を表します。これは配列作成時に配列宣言コマンド (ARRAY LONGINT等) に渡す名前です。配列は変数であり、スコープに基づいて次の3種類があります:
・インタープロセス配列
・プロセス配列
・ローカル配列
インタープロセス配列
インタープロセス配列の名前は、名前の先頭にインタープロセス (<>) 記号が付きます。インタープロセス配列名は、インタープロセス (<>) 記号を除いて31バイト以内で指定します。
例題
ARRAY TEXT(<>atSubjects;Records in table([Topics])) SORT ARRAY (<>asKeywords; >) ARRAY INTEGER(<>aiBigArray;10000)
プロセス配列
(<>記号または$記号から始まらない) 名前を使用して、プロセス配列を表わします。プロセス配列名は31バイト以内で指定します。
例題
ARRAY TEXT(atSubjects;Records in table([Topics])) SORT ARRAY (asKeywords; >) ARRAY INTEGER(aiBigArray;10000)
ローカル配列
配列名がドル記号 ($) で始まるものは、ローカル配列です。ローカル配列名は、ドル ($) 記号を除いて31バイト以内で指定します。
例題
ARRAY TEXT($atSubjects;Records in table([Topics])) SORT ARRAY ($asKeywords; >) ARRAY INTEGER($aiBigArray;10000)
配列の要素
中カッコ ({…}) を使用して、インタープロセス配列、プロセス配列、ローカル配列の要素を参照します。参照される配列要素は数式で表されます。
例題
` インタープロセス配列の要素を指定する
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つの数式で表されます。
例題
` 2次元インタープロセス配列の要素を指定する
If (<>asKeywords{$vlNextRow}{1}="Stop")
<>atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=<>aiBigArray{$vlSet}{Size of array(<>aiBigArray{$vlSet})}
` 2次元プロセス配列の要素を指定する
If (asKeywords{$vlNextRow}{1}="Stop")
atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})}
` 2次元ローカル配列の要素を指定する
If ($asKeywords{$vlNextRow}{1}="Stop")
$atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=$aiBigArray{$vlSet}{Size of array($aiBigArray{$vlSet})}
フォーム
フォームの名前は、文字列を使用して表します。フォーム名は、31文字以内で指定します。
例題
INPUT FORM([People];"Input") OUTPUT FORM([People]; "Output") DIALOG([Storage];"Note box"+String($vlStage))
メソッド
名前を使用して、メソッド (プロシージャおよび関数) を表します。メソッド名は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")
` このプラグインコマンドはメソッド名を期待する
WR ON ERROR ("WR HANDLE ERRORS")
メソッドに引数を渡すことができます。引数はメソッド名の後のカッコ内に記述します。各引数は、セミコロン (;) で区切ります。引数は、呼び出されたメソッド内で、連番付きのローカル変数$1, $2,…, $nとして使用できます。さらに、複数の連続する引数は、${n}というシンタックスを用いて使用できます。nは数値で引数の番号を示します。
関数の戻り値は、ローカル変数$0に代入することで指定します。
例題
` DROP SPACESの中で、$1はフィールド[People]Nameへのポインタ
DROP SPACES (->[People]Name)
` Calc creatorの中で:
` - $1は数値の1
` - $2は数値の5
` - $3はキストまたは文字列の"Nice"
` - 戻り値は$0に代入される
$vsResult:=Calc creator (1; 5; "Nice")
` Dumpの中で:
` - 3つの引数はキストまたは文字列
` - これらの引数は$1, $2, $3で参照できる
` - またこれらの引数を${$vlParam}でも参照できる ($vlParamは1, 2, 3)
` - 戻り値は$0に代入される
vtClone:=Dump ("is"; "the"; "it")
プラグインコマンド (外部プロシージャ、関数、そしてエリア)
プラグインで定義された名前を使用して、プラグインコマンドを表します。プラグインコマンド名は31文字以内で指定します。
例題
WR BACKSPACE (wrArea; 0) $pvNewArea:=PV New offscreen area
セット
スコープに基づき、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文字以内で指定します。
例題
` グローバルプロセス"Add Customers"を開始する
$vlProcessID:=New process("P_ADD_CUSTOMERS";48*1024;"Add Customers")
` ローカルプロセス"$Follow Mouse Moves"を開始する
$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 | <>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は、メソッドで使用される名前を次の順位で識別します:
1. フィールド
2. コマンド
3. メソッド
4. プラグインメソッド
5. 定義済み定数
6. 変数
例えば4DにはDateという組み込み関数があります。メソッドにDateという名前を付けても、4Dは組み込み関数のDateとして認識し、メソッドとしては認識しません。つまり、そのメソッドの呼び出しはできないということです。しかしフィールドにDateと命名すると、4DはDate関数の代わりにフィールドとして使用します。
参照
データタイプ, ポインタ, メソッド, 演算子, 定数, 配列, 変数.