オブジェクト
オブジェクト型の変数・フィールド・式にはさまざまなデータを格納することができます。 4D のネイティブなオブジェクトの構造は、よくある「プロパティ/値」(または「属性/値」) と いうペア (連想配列) に基づいています。 これらオブジェクトの記法は JSON をもとにしていますが、完全に同じというわけではありません。
-
プロパティ名は必ずテキストで表現されます。 プロパティ名には 命名規則 があります。
-
プロパティ値は以下のどれかの型で表現されます:
- 数値 (実数、整数、等)
- テキスト
- null
- ブール
- ポインター (
JSON Stringify
コマンドの使用、またはコピーの際に評価されます) - 日付 (日付型あるいは ISO日付フォーマット文字列)
- オブジェクト(1) (オブジェクトは入れ子にすることができます)
- ピクチャー(2)
- コレクション
(1) ORDAオブジェクト (エンティティ や エンティティセレクション 等)、Webサーバーオブジェクト などの ストリームできないオブジェクト は オブジェクトフィールド には保存できません。 保存しようとするとエラーが返されます。しかし、メモリ内の オブジェクト変数 に保存することは可能です。
(2) デバッガー内でテキストとして表示したり、JSON へと書き出されたりした場合、ピクチャー型のオブジェクトプロパティは "[object Picture]" と表されます。
警告: 属性名は大文字と小文字を区別するという点に注意してください。
オブジェクト型の変数・フィールド・式を操作するには オブジェクト記法 を用いるか、オブジェクト (ランゲージ) テーマが提供する従来のコマンドを使用します。 オブジェクト型フィールドに対して処理をおこなうには QUERY BY ATTRIBUTE
、QUERY SELECTION BY ATTRIBUTE
や ORDER BY ATTRIBUTE
など、クエリ テーマの特定のコマンドも使用することができます。
オブジェクト記法を使ってアクセスされたそれぞれのプロパティ値は式とみなされます。 4D内で式が期待される場所であれば、どこでもこのような値を使用することができます:
- 4Dコード内。メソッド (メソッドエディター) に書いても、外部化(フォーミュラ、
PROCESS 4D TAGS
あるいは Web Server によって処理される 4D tags ファイル、4D Write Proドキュメントなど) しても使用可能です。 - デバッガー及びランタイムエクスプローラーの式エリア内。
- フォームエディターにおいて、フォームオブジェクトのプロパティリスト内。変数あるいは式フィールド内の他、様々なセレクションリストボックス及びカラムの式 (データソース、背景色、スタイル、フォントカラー等) において使用可能です。
初期化
New object
コマンドを使うなどして、オブジェクトはあらかじめ初期化しておく必要があります。初期化しない場合、プロパティ値の取得や変更はシンタックスエラーとなります。
例:
C_OBJECT($obVar) // オブジェクト型の変数の作成
$obVar:=New object // オブジェクトの初期化と変数への代入
通常オブジェクトと共有オブジェクト
二種類のオブジェクトを作成することができます:
New object
コマンドを使用して作成する通常 (非共有) オブジェクト。 通常 のオブジェクトは特別なアクセスコントロールをせずに編集可能ですが、プロセス間で共有することはできません。New shared object
コマンドを使用して作成する共有オブジェクト。 共有オブジェクトはプロセス間 (プリエンティブ・スレッド含む) で共有可能なオブジェクトです。 共有オブジェクトへのアクセスはUse...End use
構造によって管理されています。 詳細な情報については、共有オブジェクトと共有コレクション を参照ください。
オブジェクト記法の使用
オブジェクト記法を使うと、トークンのチェーンを通してオブジェクトのプロパティ値にアクセスすることができます。
オブジェクトプロパティ
オブジェクト記法では、オブジェクトプロパティは二通りの方法でアクセスすることができます:
- "ドット" 記号を使用する方法: > object.propertyName
例:
employee.name:="Smith"
- 大カッコと文字列を使用する方法: > object["propertyName"]
例:
$vName:=employee["name"]
// または:
$property:="name"
$vName:=employee[$property]
オブジェクトプロパティ値には、オブジェクトやコレクションも設定することが可能です。これらのサブプロパティにアクセスするため、オブジェクト記法では連続した字句を受け入れることができます:
$vAge:=employee.children[2].age
オブジェクトを格納、あるいは返すあらゆるランゲージ要素に対してオブジェクト記法を使用できます。たとえば:
- オブジェクト 自身 (変数、フィールド、オブジェクトプロパティ、オブジェクト配列、コレクション要素などに保存されているもの)。 例:
$age:=$myObjVar.employee.age // 変数
$addr:=[Emp]data_obj.address // フィールド
$city:=$addr.city // オブジェクトプロパティ
$pop:=$aObjCountries{2}.population // オブジェクト配列
$val:=$myCollection[3].subvalue // コレクション要素
- オブジェクトを返す 4D コマンド。 例:
$measures:=Get database measures.DB.tables
- オブジェクトを返す プロジェクトメソッド 例:
// MyMethod1
C_OBJECT($0)
$0:=New object("a";10;"b";20)
//myMethod2
$result:=MyMethod1.a //10
- コレクション。 例:
myColl.length // コレクションの長さ