引数
メソッドや関数にデータを渡す必要がしばしば発生します。 これは引数によって容易にできます。
概要
引数 (または パラメーター) とは、メソッドや関数が処理に必要とするデータのことです。 引数 と パラメーター は厳密には違うものですが、このマニュアルでは同義語として使用されています。 引数は、ビルトインの 4Dコマンドにも渡されます。 以下の例は、“Hello” という文字列を引数としてビルトインの ALERT
コマンドへ渡します:
ALERT("Hello")
メソッドやクラス関数に引数を渡す場合も同様におこないます。 たとえば、getArea()
クラス関数が 2つの引数を受け取る場合、このクラス関数を呼び出すには以下のように書きます:
$area:=$o.getArea(50;100)
また、プロジェクトメソッド DO SOMETHING
が3つの引数を受け取る場合、このメソッドを呼び出すには以下のように書きます:
DO_SOMETHING($WithThis;$AndThat;$ThisWay)
入力引数は、セミコロン (;) で区切ります。
メソッドを実行する専用コマンドを利用するときも、同じ原則で引数を渡します。
EXECUTE METHOD IN SUBFORM("Cal2";"SetCalendarDate";*;!05/05/20!)
// サブフォーム "Cal2" のコンテキストにおいて SetCalendarDate を実行し
// その際に引数として日付リテラル !05/05/20! を渡します
メソッドやクラス関数からデータを 返す こともできます。 以下は、文字列のデータ長を返すビルトインの Length
コマンドを用いたステートメントです。 このステートメントでは、Length
関数が MyLength という変数に値を返します。
MyLength:=Length("How did I get here?")
どのようなサブルーチンでも値を返すことができます。 各メソッドやクラス関数につき、定義できる戻り値は一つだけです。
入力および出力値は呼び出し時に 評価 され、その値はそれぞれ自動的にサブルーチン (呼び出されたメソッドまたはクラス関数) 内のローカル変数に格納されます。 パラメーターは、呼び出されるコード内で 宣言 する必要があります。
4Dドキュメントの例題では、引数が自動的に連番のローカル変数 ($0、$1など。これを順番引数と呼びます) にコピーされ、コンパイラー指示子を使って宣言されているのを見かけるかもしれません。 例: C_TEXT($1;$2)
。 この旧シンタックスは引き続きサポートされていますが、現在は推奨されていません。
パラメーターの宣言
呼び出されたメソッドやクラス関数において、引数の値はローカル変数に代入されます。 通常、引数は パラメーター名 とその データ型 をコロン (:) で区切って宣言します。
- クラス関数の場合、引数は
Function
キーワードとともに宣言 されます。 - メソッドの場合 (プロジェクトメソッド、フォームオブジェクトメソッド、データベースメソッド、トリガー)、引数はメソッドコード先頭の
#DECLARE
キーワードを使って宣言されます。
例:
Function getArea($width : Integer; $height : Integer) -> $area : Integer
// myProjectMethod
#DECLARE ($i : Integer) -> $myResult : Object
次のルールが適用されます:
- 宣言文はメソッドや関数のコードの先頭に位置していなければなりません。宣言文より前に置けるのはコメントと改行のみであり、それ以外の場合にはエラーが表示されます。
- 引数名は必ず
$
文字で始まり、プロパティ名の命名規則 に準拠している必要があります。 - 複数のパラメーター (およびその型) を宣言する場合は、それらをセミコロン (;) で区切ります。
- 複数行シンタックスがサポートされています ("\" 文字を使用)。
たとえば、getArea()
関数に 2つの引数を渡して呼び出す場合:
$area:=$o.getArea(50;100)