Function
4D.Function オブジェクトにはコードが格納されています。 このコードは () 演算子を使用して、または apply() や call() 関数を使用して呼び出すことができます。
継承
4D は4D.Function クラスを継承した、以下のような複数の種類の Function オブジェクトを管理します:
- ネイティブ関数、
collection.sort()やfile.copyTo()などの、様々な4D クラスのビルトイン関数。 - ユーザー関数、
Functionキーワード を使用してユーザークラス で作成された関数。 - フォーミュラ関数、 4D.Formula オブジェクト内に保管されたフォーミュラコードを実行できる関数
- メソッド関数、4D.Method オブジェクト内にテキストとして保管されたソースコードを実行できる関数。
Function オブジェクト内のコードを実行する
Function オブジェクトは、オブジェクトプロパティに格納することができます:
var $message : 4D.Formula
$message:=Formula(ALERT("Hello world"))
$f:={message: $message}
このようなプロパティは "オブジェクト関数"、つまり親オブジェクトに紐づいた関数です。 オブジェクトプロパティに保存されている関数を実行するには、プロパティ名のあとに () をつけます:
$f.message() // "Hello world" を表示します
大カッコを使用したシンタックスもサポートされます:
$f["message"]() // "Hello world" と表示します
たとえ引数を受け取らなかったとしても (後述参照)、オブジェクト関数を実行するためにはカッコ () をつけて呼び出す必要があるという点に注意してください。 オブジェクトプロパティのみを呼び出した場合、フォーミュラへの新しい参照が返されます (そしてフォーミュラは実行はされません):
$o:=$f.message // $o にはFunction オブジェクトが返されます
apply() および call() 関数を使って関数を実行することもできます:
$message.apply() // "Hello world" を表示する
概要
| .apply() : any .apply( thisObj : Object { ; params : Collection } ) : any 対象の function オブジェクトを、引数をコレクションとして渡して実行し、その結果の値を返します |
| .call() : any .call( thisObj : Object { ; ...params : any } ) : any executes the function object to which it is applied, with one or more parameter(s) passed directly, and returns the resulting value |
| .source : Text 対象ファンクションのテキスト型のソースコード |
.apply()
履歴
| リリース | 内容 |
|---|---|
| 21 R3 | 4D.Methods オブジェクトのサポート |
| 17 R3 | 追加 |
.apply() : any
.apply( thisObj : Object { ; params : Collection } ) : any
| 引数 | 型 | 説明 | |
|---|---|---|---|
| thisObj | Object | -> | 関数内での This コマンドによって返されるオブジェクト |
| params | Collection | -> | 関数に引数として渡される値のコレクション |
| 戻り値 | any | <- | 関数の実行結果の値 |
説明
.apply() 関数は、対象の function オブジェクトを、引数をコレクションとして渡して実行し、その結果の値を返します。
thisObj には、関数内で This として使用されるオブジェクトへの参照を渡すことができます。 This を使用せず、しかし引数を渡したい場合には、ここに Null を渡します。
任意の params 引数を使用することで、フォーミュラ内で引数として使用されるコレクションを渡すこともできます:
4D.Formulaオブジェクトには、引数は $1...$n でフォーミュラに渡されます。4D.Methodオブジェクトのようなその他の4D.Functionオブジェクトには、引数は宣言されたメソッド引数 内に渡されます。
.apply() は .call() と似ていますが、引数をコレクションとして渡す点が異なります。 これは計算された結果を渡すのに便利です。
.call()
履歴
| リリース | 内容 |
|---|---|
| 21 R3 | 4D.Methods オブジェクトのサポート |
| 17 R3 | 追加 |
.call() : any
.call( thisObj : Object { ; ...params : any } ) : any
| 引数 | 型 | 説明 | |
|---|---|---|---|
| thisObj | Object | -> | 関数内での This コマンドによって返されるオブジェクト |
| params | any | -> | 関数に引数として渡される値 |
| 戻り値 | any | <- | 関数の実行結果の値 |
説明
The .call() function executes the function object to which it is applied, with one or more parameter(s) passed directly, and returns the resulting value.
thisObj には、関数内で This として使用されるオブジェクトへの参照を渡すことができます。
任意の params 引数を使用することで、フォーミュラ内で引数として使用される値を渡すこともできます:
4D.Formulaオブジェクトには、引数は $1...$n でフォーミュラに渡されます。4D.Methodオブジェクトでは、引数は宣言されたメソッド引数 内に渡されます。
.call() は .apply() と似ていますが、引数を直接渡す点が異なります。
例題 1
var $f : 4D.Function
$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 R3 | 4D.Methods オブジェクトのサポート |
| 18 R2 | 追加 |
.source : Text
説明
.source プロパティは、対象ファンクションのテキスト型のソースコードを格納します。
返される値は4D.Formula または4D.Method オブジェクトを作成するのに使用された元のテキストですが、再フォーマットされます。
このプロパティは 読み取り専用 です。
例題
var $of : 4D.Function
var $tf : Text
$of:=Formula(String(Current time;HH MM AM PM))
$tf:=$of.source //"String(Current time;HH MM AM PM)"