メインコンテンツまでスキップ
バージョン: 次へ

Formula

4D.Formula オブジェクトは Formula または Formula from string コマンドによって作成され、これを使用するとあらゆる4D 式または単一行のテキストとして表現されたコードを実行することができます。

4D.Formula クラスオブジェクトは、 4D.Function クラスを継承します。 そのため、フォーミュラを実行するためには、以下のような方法があります:

  • オブジェクトプロパティに 4D.Formula オブジェクトを入れ、プロパティ名の後に () 演算子を使用する
  • または、 call() あるいは apply() 関数を使用して 4D.Formula オブジェクトを呼び出す。

Function オブジェクト内のコードを実行する の段落の例題を参照してください。

フォーミュラに引数を渡す

フォーミュラには、順番引数シンタックス $1, $2...$n を使用して引数を渡すことができます。 $ 付きの引数の番号は、それらがフォーミュラに渡される順番を表します。 たとえば:

 $f:={message: Formula(ALERT("Hello "+$2+", "+$1))}
$f.message("John";"Smith") // "Hello Smith, John" と表示する

あるいは、.call() 関数を使用して:

 var $f : 4D.Formula
$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 2026" を返す(一例)

単一メソッド用の引数

利便性のために、フォーミュラが単一のプロジェクトメソッドから作成された場合には、引数はフォーミュラオブジェクトの初期化では省略することができます。 省略された引数は、フォーミュラを呼び出す時に一緒に渡すことができます。 例:

 var $f : 4D.Formula

$f:=Formula(myMethod)
// Formula(myMethod($1;$2)) と書くのは必須ではない
$text:=$f.call(Null;"Hello";"World") // "Hello World" を返す
$text:=$f.call() // "How are you?" を返す

//myMethod
#DECLARE ($param1 : Text; $param2 : Text)->$return : Text
If(Count parameters=2)
$return:=$param1+" "+$param2
Else
$return:="How are you?"
End if

引数はメソッド内において、呼び出し時に指定した順で受け取られます。

フォーミュラオブジェクト

.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any

対象の function オブジェクトを、引数をコレクションとして渡して実行し、その結果の値を返します
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

.source : Text
対象ファンクションのテキスト型のソースコード

.apply()

履歴
リリース内容
21 R34D.Methods オブジェクトのサポート
17 R3追加

.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any

引数説明
thisObjObject->関数内での This コマンドによって返されるオブジェクト
paramsCollection->関数に引数として渡される値のコレクション
戻り値any<-関数の実行結果の値

説明

.apply() 関数は、対象の function オブジェクトを、引数をコレクションとして渡して実行し、その結果の値を返します。

thisObj には、関数内で This として使用されるオブジェクトへの参照を渡すことができます。 This を使用せず、しかし引数を渡したい場合には、ここに Null を渡します。

任意の params 引数を使用することで、フォーミュラ内で引数として使用されるコレクションを渡すこともできます:

  • 4D.Formula オブジェクトには、引数は $1...$n でフォーミュラに渡されます。
  • 4D.Method オブジェクトのようなその他の 4D.Function オブジェクトには、引数は宣言されたメソッド引数 内に渡されます。

.apply().call() と似ていますが、引数をコレクションとして渡す点が異なります。 これは計算された結果を渡すのに便利です。

例題 1

 var $f : 4D.Formula
$f:=Formula($1+$2+$3)

$c:=New collection(10;20;30)
$result:=$f.apply(Null;$c) // 60 を返す

例題 2

 var $calc : 4D.Formula
var $feta; $robot : Object
$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)

$calc.apply($feta) // $feta={name:Feta,price:12.5,quantity:5,total:62.5}
$calc.apply($robot) // $robot={name:Robot,price:543,quantity:2,total:1086}

.call()

履歴
リリース内容
21 R34D.Methods オブジェクトのサポート
17 R3追加

.call() : any
.call( thisObj : Object { ; ...params : any } ) : any

引数説明
thisObjObject->関数内での This コマンドによって返されるオブジェクト
paramsany->関数に引数として渡される値
戻り値any<-関数の実行結果の値

説明

.call() 関数は、対象の function オブジェクトを、一つまたはそれ以上の引数を直接渡して実行し、その結果の値を返します。

thisObj には、関数内で This として使用されるオブジェクトへの参照を渡すことができます。

任意の params 引数を使用することで、フォーミュラ内で引数として使用される値を渡すこともできます:

  • 4D.Formula オブジェクトには、引数は $1...$n でフォーミュラに渡されます。
  • 4D.Method オブジェクトでは、引数は宣言されたメソッド引数 内に渡されます。

.call().apply() と似ていますが、引数を直接渡す点が異なります。

例題 1

 var $f : 4D.Formula
$f:=Formula(Uppercase($1))
$result:=$f.call(Null;"hello") // "HELLO" を返す

例題 2

 $o:=New object("value";50)
$f:=Formula(This.value*2)
$result:=$f.call($o) // 100 を返します

.source

履歴
リリース内容
21 R34D.Methods オブジェクトのサポート
18 R2追加

.source : Text

説明

.source プロパティは、対象ファンクションのテキスト型のソースコードを格納します。

返される値は4D.Formula または4D.Method オブジェクトを作成するのに使用された元のテキストですが、再フォーマットされます。

このプロパティは 読み取り専用 です。

例題

 var $of : 4D.Formula
var $tf : Text
$of:=Formula(String(Current time;HH MM AM PM))
$tf:=$of.source //"String(Current time;HH MM AM PM)"