メインコンテンツまでスキップ
バージョン: 20 R7 BETA

New object

New object {( property ; value {; property2 ; value2 ; ... ; propertyN ; valueN} )} : Object

引数説明
propertyText作成するプロパティ名
valueanyプロパティの値
戻り値Object新しいランゲージオブジェクト

説明

New object コマンドは新しい空の、あるいは事前に値が入れられたオブジェクトを作成し、その参照を返します。

何も引数を渡さなかった場合、New object は空のオブジェクトを作成し、その参照を返します。この参照をC_OBJECT で作成された4D変数あるいは4Dオブジェクトフィールドへと割り当てて下さい。

注: C_OBJECT はObject type型の変数を宣言しますが、オブジェクトは作成しません。

オプションとして、一つあるいは複数のproperty/value のペアを引数として渡すことにより、新規オブジェクトにあらかじめ値を入れておくことができます:

  • property 引数には、作成したいプロパティのラベルを渡します。property 引数は大文字と小文字を区別することに注意してください。
  • value 引数にはプロパティに設定したい値を渡します。以下の型の値がサポートされます:
    • 数値(実数、整数...) 数値は必ず実数として保存されます。
    • テキスト
    • ブール
    • ポインター
    • blob (4D.Blob)
    • 日付
    • 時間
    • null
    • ピクチャー
    • オブジェクト
    • コレクション

以下の点に注意して下さい:

  • ポインターを渡した場合、それはそのままの形で保存されます。JSON Stringify コマンドを使用した際に評価されます。
  • 日付はカレントの"date inside objects"データベース設定(互換性ページ参照)に応じて、"yyyy-mm-dd" という日付か "YYYY-MM-DDTHH:mm:ss.SSSZ"というフォーマットの文字列で保存されます。4D日付をオブジェクトに保存する前にテキストに変換した場合、プログラムはデフォルトでローカルのタイムゾーンを使用します。SET DATABASE PARAMETER コマンドのDates inside objects セレクターを使用することで、この振る舞いを変更することができます。
  • 時間を渡した場合、ミリ秒の数(実数)として保存されます。

例題 1

このコマンドは空の、あるいは値が入れられたオブジェクトを作成することができます:

 var $obj1 : Object
 var $obj2 : Object
 var $obj3 : Object
 $obj1:=New object
  // $obj1 = {}
 $obj2:=New object("name";"Smith")
  // $obj2 = {name:Smith}
 $obj3:=New object("name";"Smith";"age";40)
  // $obj3 = {name:Smith,age:40}

例題 2

オブジェクトを引数の値として渡して、新規のオブジェクトを作成する場合を考えます:

 var $Children;$Contact : Object
 
  //オブジェクト配列を作成
 ARRAY TEXT($arrChildren;3)
 $arrChildren{1}:="Richard"
 $arrChildren{2}:="Susan"
 $arrChildren{3}:="James"
 OB SET ARRAY($Children;"Children";$arrChildren)
 
  //オブジェクトを初期化
 $Contact:=New object("FirstName";"Alan";"LastName";"Parker";"age";30;"Children";$Children)
  // $Contact = {FirstName:Alan,LastName:Parker,age:30,Children:{Children:[Richard,Susan,James]}}

例題 3

このコマンドはオブジェクトを引数として渡す際に便利です:

 var $measures : Object
 $measures:=Database measures(New object("path";"DB.cacheReadBytes";"withHistory";True;"historyLength";120))

例題 4

このコマンドを使用すると、オブジェクトをループ内で容易に管理できます:

 ARRAY OBJECT($refs;0)
 var vCounter : Integer
 
 For(vCounter;1;100)
    APPEND TO ARRAY($refs;New object("line";"Line number "+String(vCounter)))
 End for

参照

New shared object

プロパティ

コマンド番号1471
スレッドセーフである