関数やメソッドの宣言では、そのパラメーターを明示的に定義します。そして、その関数やメソッドを呼び出す際に、いくつかのパラメーターが省略可能であれば、それより少ない数の引数を渡すことができます。あるいは、${n} を使った宣言の場合、引数の数は可変です。この場合には Count Parameters コマンドを使い、引数をループさせます。このコードは完璧に動作します。それでも、ちょっと重いですね。
そこで、もっと軽い方法で引数を処理できないかとの要望にお応えして、4D v19 R5 から、新しいコマンド Copy parameters を提供します。これにより、よりエレガントで簡単な、読みやすいコードが書けるようになりました。
新コマンド
新しいコマンド Copy parameters は、関数やメソッドに渡された引数のコレクションを返します。Copy parameters コマンドに “startFrom” 引数を渡すと、”startFrom” で指定したインデックスからの要素を含むコレクションを返します。
例題
引数コレクションの利用。
たとえば、文字列と引数を連結して、順序のない HTML リストを作成します:
// クラス
Function list() -> $html : Text
var $value : Collection
$value:=Copy parameters
$html:="<ul><li>"
$html+=$value.join("</li><li>")
$html+="</li></ul>"
return $html
// メソッド
$htmlList:=$c.list("Alpha";"Bravo";"Charlie")
// $htmlList: <ul><li>Alpha</li><li>Bravo</li><li>Charlie</li></ul>
処理の分岐に利用。
最初の引数によって異なる関数を呼び出し、後続の引数をこの関数に渡します:
Function selectTask($task : Text)
Case of
: ($task="Task1")
This.task1(Copy parameters(2))
: ($task="Task2")
This.task2(Copy parameters(2))
End case
引数の転送。
apply() で別のオブジェクトの関数を呼び出し、引数を渡します:
Function doSomething($param : Text; $extraParameters : Variant)
This.delegate.doSomething.apply(This.delegate; Copy parameters)
次は
詳しくは、ドキュメントを参照ください。フォーラムでは、あなたのアイディアや例題を遠慮なく共有してください。