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

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

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

.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.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 R34D.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)"