| 4D v18Formula | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v18
 Formula 
         | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Formula ( formulaExp ) -> 戻り値 | ||||||||
| 引数 | 型 | 説明 | ||||||
| formulaExp | 式 |   | オブジェクトとして返されるフォーミュラ | |||||
| 戻り値 | Object |   | フォーミュラを格納しているネイティブなオブジェクト | |||||
Formula は、formulaExp 引数の式に基づいたフォーミュラオブジェクトを作成します。 formulaExp 引数は単一の値のようにシンプルなものから、引数を持つプロジェクトメソッドのように複雑なものまで指定することができます。
オブジェクトとしてのフォーミュラを使用することで、コマンドやメソッドに対して引数(計算された属性)として渡すことや、"コンポーネントとホストデータベース間で共有"として宣言することなく様々なコンポーネントから実行することができるようになります。呼び出されたとき、フォーミュラオブジェクトは、それを作成したデータベースあるいはコンポーネントのコンテキストにおいて評価されます。
返されたフォーミュラは以下の方法で呼び出すことが可能です:
 C_OBJECT($f)
 $f:=Formula(1+2)
 $o:=New object("myFormula";$f)
 
  //フォーミュラを呼び出す3つの方法
 $f.call($o) // 3 を返す
 $f.apply($o) // 3 を返す
 $o.myFormula() // 3 を返すオブジェクトは以下の例題5 のように、それが実行されたフォーミュラをもって特定することができます。オブジェクトのプロパティは、This コマンドを使用することでアクセス可能です。
formulaExp がローカル変数を使用する場合、その値は返されるフォーミュラオブジェクトが作成されたときにそこにコピーされ保存されます。実行時、フォーミュラはそのローカル変数のカレントの値ではなく、コピーされた値を使用します。配列をローカル変数として使用することはサポートされていないという点に注意してください。
Formula によって作成されたオブジェクトは、例えばデータベースのフィールドやBlob ドキュメントなどに保存可能です。
フォーミュラには、標準の$1, $2...,$n 機構を使用して引数を渡すことができます。例えば、以下のように書くことができます:
 C_OBJECT($f)
 $f:=Formula($1+" "+$2)
 $text:=$f.call(Null;"Hello";"World") // "Hello World" を返す
 $text:=$f.call(Null;"Welcome to";String(Year of(Current date))) // "Welcome to 2019" などを返す(一例)利便性のために、フォーミュラが単一のプロジェクトメソッドから作成された場合には、引数はフォーミュラオブジェクトの初期化では省略することができます。フォーミュラを呼び出す時に一緒にそれを渡すだけで使用できます。例:
 C_OBJECT($f)
 $f:=Formula(myMethod)
  //ここで Formula(myMethod($1;$2) と書く必要はない
 $text:=$f.call(Null;"Hello";"World") // "Hello World" を返す
 $text:=$f.call() // "How are you?" を返す</p> <p>//myMethod
 C_TEXT($0;$1;$2)
 If(Count parameters=2)
    $0:=$1+" "+$2
 Else
    $0:="How are you?"
 End if引数はメソッド内において、$1, $2... で呼び出し時に指定した順で受け取られます。
注: フォーミュラ内で使用される引数 $n と、フォーミュラ内で呼び出されたmethod が受け取る引数 $n とを混同しないように注意してください。
単純なフォーミュラを使用する場合を考えます:
 C_OBJECT($f)
 $f:=Formula(1+2)
 
 C_OBJECT($o)
 $o:=New object("f";$f)
 
 $result:=$o.f() // 3 を返すローカル変数を使用するフォーミュラの場合を考えます:
 $value:=10
 $o:=New object("f";Formula($value))
 $value:=20
 
 $result:=$o.f() // 10 を返す引数を用いたシンプルなフォーミュラの場合を考えます:
 $o:=New object("f";Formula($1+$2))
 $result:=$o.f(10;20) // 30 を返す引数を用いたプロジェクトメソッドを使用するフォーミュラの場合を考えます:
 $o:=New object("f";Formula(myMethod))
 $result:=$o.f("param1";"param2") // $result:=myMethod("param1";"param2") と同等This を使用する場合を考えます:
 $o:=New object("fullName";Formula(This.firstName+" "+This.lastName))
 $o.firstName:="John"
 $o.lastName:="Smith"
 $result:=$o.fullName() // "John Smith" を返すオブジェクト記法を使用してフォーミュラを呼び出す場合を考えます:
 C_OBJECT($calc;$feta;$robot)
 $robot:=New object("name";"Robot";"price";543;"quantity";2)
 $feta:=New object("name";"Feta";"price";12.5;"quantity";5)
 
 $calc:=Formula(This.total:=This.price*This.quantity)
 
  // フォーミュラをオブジェクトプロパティに設定する
 $feta.calc:=$calc
 $robot.calc:=$calc
 
  // フォーミュラを呼び出す
 $feta.calc() // $feta={name:Feta,price:12.5,quantity:5,total:62.5,calc:"[object Formula]"}
 $robot.calc() // $robot={name:Robot,price:543,quantity:2,total:1086,calc:"[object Formula]"}
	プロダクト: 4D
	テーマ: フォーミュラ
	番号: 
        1597
        
        
        
	
	初出: 4D v17 R3
	名称変更: 4D v17 R6
	
	ランゲージリファレンス ( 4D v18)
	
	
	
 コメントを追加
コメントを追加