オブジェクトは素晴らしい、誰もがそう言います。その素晴らしい柔軟性に加え、信じられないほどの速さです。何百万ものレコードをほんの一瞬で検索することができるのです。4D v16 では、オブジェクト属性による並べ替えや、Sum や Average のような計算も可能です。
4D v16 R4 では、オブジェクト記法 のサポートにより、4Dランゲージが大幅に強化され、オブジェクトをより快適に使用できるようになりました。高速で、フレキシブルで、効率的、そしてエレガントです。
何が可能か?
4Dランゲージのオブジェクトは、標準的なオブジェクト記法を用いて、その値を取得・設定することができます。オブジェクト記法を使えば:
- オブジェクトのプロパティは、”ドット” シンボルでアクセスできます (例: employee.name)
- オブジェクトのコレクション要素には、角括弧を使用してアクセスすることができます (例: rooms[2])
- 組み込まれたサブオブジェクトとサブオブジェクトのプロパティは、一連の記号でアクセスできます (例: employee.children[2].age)。
つまり、OB Get と OB SET を使わなくてすむようになりました。そして、知っていますか? コードの実行速度は OB Get/OB SET を使うよりオブジェクト記法を使った方が10倍速くなります!
オブジェクト記法の例
たとえば、次のような情報を含む $oオブジェクトがあるとします:
{ "Lastname": "Doe", "Firstname": "John", "Avatar": "[object Picture]" "Child": [{ "Name": "Susan", "Age": 3 } , { "Name": "Bob", "Age": 8 }] }
このオブジェクトから “Firstname” 属性を取得するには、次のように書きます:
オブジェクト記法
C_TEXT($name)
$name:=$o.Firstname
オブジェクト記法なし
C_TEXT($name)
$name:=OB Get($o;"Firstname")
2番目の子の “Name” を取得するには、次のように書きます:
オブジェクト表記
C_TEXT($name)
$name:=$o.Child[1].Name
オブジェクト表記なし
ARRAY OBJECT($aChild;0)
C_TEXT($name)
OB GET ARRAY($o;"Child";$aChild)
$name:=OB GET($aChild{2};"Name")
もう一人子供を追加するには、こう書きます:
オブジェクト記法
$o.Child[2].Name:="Mike"
$o.Child[2].Age:=9
オブジェクト表記なし
ARRAY OBJECT($aChild;0)
C_OBJECT($kid)
OB GET ARRAY($o;"Child";$aChild)
OB SET($kid;"Name";"Mike")
OB SET($kid;"Age";9)
APPEND TO ARRAY($aChild;$kid)
OB SET ARRAY($o;"Child";$aChild)
オブジェクト属性に画像を追加するには、こう書きます:
オブジェクト記法
C_PICTURE($img)
READ PICTURE FILE("img.jpg";$img)
$o.avatar:=$img
オブジェクト表記なし
C_PICTURE($img )
READ PICTURE FILE("img.jpg";$img)
OB SET($o;"avatar";$img)
ポインター表記を使う場合は、こう書きます:
オブジェクト記法
C_POINTER($p)
$p:=->$o
...
C_TEXT($name)
$name:=$p->Firstname
オブジェクト表記なし
C_POINTER($p)
$p:=->$o
...
C_TEXT($name)
$name:=OB Get($p->;"Firstname")
オブジェクト記法を有効にするには?
オブジェクト記法を有効にするには、データベース設定ダイアログの 互換性タブで “オブジェクト記法を有効化する” ボタンをクリックする必要があります:
オブジェクト表記法を有効にするには、いくつかの前提条件がありますが、準備のお手伝いをさせていただきます: