メソッドや関数は、オプションのパラメータを持つことができます。関数が2つのパラメータで呼び出されることもあれば、3つのパラメータで呼び出されることもあります。パラメータを数えたり、パラメータが渡されたかどうかをチェックしたり、あるいは単にパラメータに関連する変数が初期化されているかどうかをチェックすることなく、パラメータにアクセスすることを誰もが夢見たことがあるでしょう。そうすれば、”If “や “Count parameters “などの行が不要になり、コードがよりシンプルに、より読みやすくなるはずです。
さて、もう夢はありません、4D v19 R3に乗り換えましょう!メソッドや関数のパラメータ管理は、かつてないほど簡単になりました。
パラメータへのアクセス
関数やメソッドのプロトタイプで宣言したパラメータは、呼び出し中にパラメータが渡されないと、変数に空の値がインスタンス化されます。コンパイルモードでも、このための実行時エラーは発生しなくなりました。このドキュメントのページでは、変数の種類ごとに対応表が用意されていますね。
次の例では、関数が $param1と$param2パラメータをチェックなしで使用しています。もし、この関数を呼び出す際に、$param1や $param2のパラメータが渡されなかった場合、4Dはtext変数を空文字列にインスタンス化します。
// "concate" function class
Function concate ( : ; : ) ( +" "+ ) $param1 Text $param2 Text
Alert$param1$param2
// "method1" method
$class.("Hello";" world") .("こんにちは") concate // Display: "Hello world"
$classconcate // Display: "Hello "
.$class
concate()// Display: " "
注意してください。4Dが変数をインスタンス化するためには、その変数の型がわかる必要があります。もし、${i}という記法を使い、パラメータを渡して宣言していない場合、コンパイルモードでは必ず実行エラーになります。
パラメータの初期化
パラメータが渡されない場合、その関連する変数は空の値でインスタンス化されることを見てきました。そこで、今度は Chooseコマンドを使用して、パラメータが渡されない場合に値を直接定義することができます。
以下は、あるメソッドと #DECLARE命令を使用した例です。
// "myAlert" method
()
#DECLARE$param2( : ; : ) := ( >=1 ; ; "Hello") := ( >=2 ; ; "world") ( +" "+ ) $param1 Text $param2 Text
$param1ChooseCount parameters $param1
ChooseCount parameters $param2
Alert$param1$param2
// "method1" method
myAlert // Display: "Hello world"
コンポーネントについてはどうだろうか?
この簡略化の恩恵を受けるには、呼び出されるメソッドと呼び出すメソッドを再コンパイルする必要があります。つまり、ホストベースとコンポーネントで共有されるメソッドの場合、両方のプロジェクトを再コンパイルする必要があるのです。
でも、ソースを持っていないコンパイル済みのコンポーネントはどうなるのでしょうか? 心配しないでください、今まで通り使えます。あなたのコードを変更する必要はありません。
次はどうする?
この新機能は、あなたのメソッドや関数にたくさんのアイデアを与えてくれます。フォーラムであなたのヒントを自由にシェアしてください。